数据库就是存储数据的仓库
分为关系型数据库和非关系型数据库
常用的数据库管理软件有:甲骨文的oracle MySQL(开源、免费、跨平台)
IBM的db2 微软的sql server access
下载安装MySQL:
登录 cmd :mysql -u用户名 -p(回车就是输入密文,不回车直接输入就是明文,都可以)
退出 quit;exit;-q; 不要忘记分号
连接其他主机的MySQL:
mysql -h 服务器IP -P 端口号(一般默认3306)-u用户名 -p
sql及其规范
sql就是针对数据库操作的指令集
不区分大小写,尽量用大写
单行注释 --
多行注释 /* */
打印当前时间 select now();
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2019-09-18 20:26:25 |
+---------------------+
1 row in set (0.00 sec)
显示所有数据库:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| book_msg |
| dianqi_std |
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
8 rows in set (0.15 sec)
删除数据库:
drop database 数据库名;
创建数据库:
create database dbname;
C:\ProgramData\MySQL\MySQL Server 8.0\Data --所有创建的数据库都在这ProgramData是隐藏的
mysql> create database s3; --创建一个名为s3的数据库
Query OK, 1 row affected (0.02 sec)
mysql> create database s3; --重复创建这个数据库
ERROR 1007 (HY000): Can‘t create database ‘s3‘; database exists --报错,已存在
mysql> create database if not exists s3; -- 加上一句话就不报错,出现警告
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> show warnings; -- 查看出现的警告
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1007 | Can‘t create database ‘s3‘; database exists |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
查看创建信息
show create database s3;
+----------+------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------------------------------------------------------------------+
| s3 | CREATE DATABASE `s3` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION=‘N‘ */ |
+----------+------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
在创建时指定字符编码
create database s4 character set gbk;
再查看就变为gbk编码了
mysql> show create database s4;
+----------+-----------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------------------------------------+
| s4 | CREATE DATABASE `s4` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION=‘N‘ */ |
+----------+-----------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
修改已经创建的数据库的字符编码
ALTER DATABASE employee CHARACTER SET UTF8;
进入数据库:
use bdname;
检测当前所在的数据库:
select database();
+------------+
| database() |
+------------+
| s4 |
+------------+
1 row in set (0.00 sec)
可以通过use dbname 在不同的数据库之间切换
表的创建
主键:非空且唯一 not null unique
三种数据类型:数字、字符、时间和日期
mysql> CREATE TABLE employee( --创建表
-> id INT PRIMARY KEY AUTO_INCREMENT, --主键 自增
-> name VARCHAR(25), --25个字节
-> birthday date,
-> salary DOUBLE(7,1) --一共七个数字,小数点后一位
-> );
Query OK, 0 rows affected (0.10 sec)
mysql> desc employee; 查看表结构
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(25) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| salary | double(7,1) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql> SHOW CREATE TABLE employee; --查看表的创建信息
+----------+------------------------------------
| Table | Create Table
+----------+-----------------------------
| employee | CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`salary` double(7,1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+----------+-------------------------------
1 row in set (0.01 sec)
表字段操作:
添加字段:
ALTER TABLE employee ADD entry_date date not null AFTER birthday; --AFTER(FIRST)将字段添加到某个字段之后
添加多个字段
ALTER TABLE employee ADD A INT,
ADD B INT;
删除字段:
ALTER TABLE employee DROP A,
DROP B;
修改字段:
ALTER TABLE employee MODIFY A VARCHAR(4) UNIQUE;
修改已经创建的表的字符编码
ALTER TABLE employee CHARACTER SET UTF8;
修改字段名:
ALTER TABLE EMPLOYEE CHANGE A B CHAR(4);
修改表名:
RENAME TABLE S3 TO S4;
表记录操作:
向表中添加记录:
方式一 : () VALUES () VALUES左右对应
INSERT INTO EMP (id,name,gender,salary,B) VALUES
(1,"瞎驴",1,5000.21,"HELL");
添加多条:
INSERT INTO EMP (name,gender,salary,B) VALUES
("ALEX",1,5000,"WORL"),
("丹丹",0,3000,"HELO");
注意:如果插入的id号不是按顺序来的,下次插入会按插入的id继续向下计数
就是说本来id号到6了,继续插入记录应该是7,但指定id为10,下面插入的记录如果没指定id,
就是11
方式二: SET 键值对:
INSERT INTO EMP SET name="珊珊",gender=0; --其余没有对应的自动为NULL
查看表记录:
mysql> select * from emp;
+----+------+--------+--------+------+
| id | name | gender | salary | B |
+----+------+--------+--------+------+
| 1 | 瞎驴 | 1 | 5000.2 | HELL |
| 4 | ALEX | 1 | 5000.0 | WORL |
| 5 | 丹丹 | 0 | 3000.0 | HELO |
+----+------+--------+--------+------+
3 rows in set (0.00 sec)
修改表记录:
UPDATE EMP SET name = "lvxia" WHERE ID = 1 -- WHER 做筛选,否则会修改所有的name
删除表记录:
两种方式:
DELETE FROM TABLE_NAME [WHERE....]; :逐条删除
TRUNCATE TABLE TABLE_NAME; :删除整个表,在创建一个空表