|
|
<h1><center>数据库管理及数据类型</center></h1>
|
|
|
|
|
|
**作者:行癫(盗版必究)**
|
|
|
|
|
|
------
|
|
|
|
|
|
## 一:数据类型
|
|
|
|
|
|
#### 1.数值类型
|
|
|
|
|
|
##### 整数类型
|
|
|
|
|
|
整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT
|
|
|
|
|
|
作用:用于存储用户的年龄、游戏的Level、经验值等
|
|
|
|
|
|
![image-20220920124821420](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220920124821420.png)
|
|
|
|
|
|
##### 浮点数类型
|
|
|
|
|
|
浮点数类型:FLOAT DOUBLE
|
|
|
|
|
|
作用:用于存储用户的身高、体重、薪水等
|
|
|
|
|
|
![image-20220920124919373](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220920124919373.png)
|
|
|
|
|
|
```shell
|
|
|
float(5,3) 5宽度 3精度
|
|
|
注意:
|
|
|
宽度不算小数点
|
|
|
宽度-精度=点前
|
|
|
案例:
|
|
|
MySQL [(none)]> create database diandian;
|
|
|
Query OK, 1 row affected (0.00 sec)
|
|
|
|
|
|
MySQL [(none)]> use diandian
|
|
|
Database changed
|
|
|
MySQL [diandian]> create table t1(id float(6,2));
|
|
|
Query OK, 0 rows affected (0.24 sec)
|
|
|
|
|
|
MySQL [diandian]> insert into t1 values('2.22');
|
|
|
```
|
|
|
|
|
|
##### 定点数类型
|
|
|
|
|
|
定点数类型:DEC
|
|
|
|
|
|
定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据
|
|
|
|
|
|
##### 位类型
|
|
|
|
|
|
位类型:BIT
|
|
|
|
|
|
BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位
|
|
|
|
|
|
#### 2.字符串类型
|
|
|
|
|
|
CHAR系列 CHAR VARCHAR
|
|
|
|
|
|
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
|
|
|
|
|
|
BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
|
|
|
|
|
|
BINARY系列 BINARY VARBINARY
|
|
|
|
|
|
![image-20220920132114919](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220920132114919.png)
|
|
|
|
|
|
##### 枚举类型
|
|
|
|
|
|
枚举类型:枚举列可以把一些不重复的字符串存储成一个预定义的集合
|
|
|
|
|
|
```shell
|
|
|
mysql> create table enum_table( e ENUM('fish','apple','dog'));
|
|
|
Query OK, 0 rows affected (0.35 sec)
|
|
|
mysql> insert into enum_table(e) values('fish');
|
|
|
Query OK, 1 row affected (0.11 sec)
|
|
|
|
|
|
mysql> select * from enum_table;
|
|
|
+------+
|
|
|
| e |
|
|
|
+------+
|
|
|
| fish |
|
|
|
+------+
|
|
|
1 row in set (0.00 sec)
|
|
|
|
|
|
mysql> insert into enum_table(e) values('nihao');
|
|
|
ERROR 1265 (01000): Data truncated for column 'e' at row 1
|
|
|
```
|
|
|
|
|
|
##### 时间和日期类型
|
|
|
|
|
|
时间和日期类型:DATE TIME DATETIME TIMESTAMP YEAR
|
|
|
|
|
|
作用:用于存储用户的注册时间,文章的发布时间,文章的更新时间,员工的入职时间等
|
|
|
|
|
|
![image-20220920132630856](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220920132630856.png)
|
|
|
|
|
|
```shell
|
|
|
mysql> create table t8 (
|
|
|
id1 timestamp NOT NULL default CURRENT_TIMESTAMP,
|
|
|
id2 datetime default NULL
|
|
|
);
|
|
|
|
|
|
timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。
|
|
|
|
|
|
mysql> insert into t8(id1) values('20180109000000');
|
|
|
mysql> select * from t8;
|
|
|
+---------------------+------+
|
|
|
| id1 | d2 |
|
|
|
+---------------------+------+
|
|
|
| 2018-01-09 00:00:00 | NULL |
|
|
|
+---------------------+------+
|
|
|
1 row in set (0.00 sec)
|
|
|
|
|
|
扩展:
|
|
|
select now();查看当前时间
|
|
|
```
|
|
|
|
|
|
## 二:表操作
|
|
|
|
|
|
#### 1.案例
|
|
|
|
|
|
表::school.student1
|
|
|
|
|
|
```
|
|
|
字段 字段 字段
|
|
|
id name sex age
|
|
|
1 tom male 23 记录
|
|
|
2 jack male 21 记录
|
|
|
3 alice female 19 记录
|
|
|
```
|
|
|
|
|
|
语法:
|
|
|
|
|
|
```shell
|
|
|
create table 表名(自定义)(
|
|
|
字段名1 类型[(宽度) 约束条件],
|
|
|
字段名2 类型[(宽度) 约束条件],
|
|
|
字段名3 类型[(宽度) 约束条件]
|
|
|
)[存储引擎 字符集];
|
|
|
==在同一张表中,字段名是不能相同
|
|
|
==宽度和约束条件可选
|
|
|
==字段名和类型是必须的
|
|
|
```
|
|
|
|
|
|
创建库表:
|
|
|
|
|
|
```shell
|
|
|
mysql> CREATE DATABASE school; //创建数据库school
|
|
|
mysql> use school;
|
|
|
mysql> create table student1(
|
|
|
id int,
|
|
|
name varchar(50),
|
|
|
sex enum('m','f'),
|
|
|
age int
|
|
|
);
|
|
|
Query OK, 0 rows affected (0.03 sec)
|
|
|
```
|
|
|
|
|
|
查看库:
|
|
|
|
|
|
```shell
|
|
|
mysql> show tables;
|
|
|
+------------------+
|
|
|
| Tables_in_school |
|
|
|
+------------------+
|
|
|
| student1 |
|
|
|
+------------------+
|
|
|
1 row in set (0.00 sec)
|
|
|
```
|
|
|
|
|
|
插入语法:
|
|
|
|
|
|
```
|
|
|
insert into 表名(字段1,字段2...) values(字段值列表...);
|
|
|
```
|
|
|
|
|
|
插入数据:
|
|
|
|
|
|
```shell
|
|
|
mysql> insert into student1(id,name,sex,age) values(1,'xingdia','m','26');
|
|
|
```
|
|
|
|
|
|
查看表结构:
|
|
|
|
|
|
```shell
|
|
|
mysql> desc student1;
|
|
|
+-------+---------------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+---------------+------+-----+---------+-------+
|
|
|
| id | int(11) | YES | | NULL | |
|
|
|
| name | varchar(50) | YES | | NULL | |
|
|
|
| sex | enum('m','f') | YES | | NULL | |
|
|
|
| age | int(11) | YES | | NULL | |
|
|
|
+-------+---------------+------+-----+---------+-------+
|
|
|
4 rows in set (0.00 sec)
|
|
|
```
|
|
|
|
|
|
查询数据:
|
|
|
|
|
|
```shell
|
|
|
mysql> select id,name,sex,age from student1; //查询表中所有字段的值
|
|
|
Empty set (0.00 sec)
|
|
|
|
|
|
mysql> select * from student1; /查询表中所有字段的值
|
|
|
Empty set (0.00 sec)
|
|
|
|
|
|
mysql> select name,age from student1; //查询表中指定字段的值
|
|
|
Empty set (0.00 sec)
|
|
|
```
|
|
|
|
|
|
扩展插入:
|
|
|
|
|
|
```shell
|
|
|
mysql> insert into student1 values (1,'xingdian','m',33),(2,'alice','m',20),(3,'jack','m',40); //顺序插入
|
|
|
Query OK, 3 rows affected (0.14 sec)
|
|
|
Records: 3 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
mysql> insert into student1(name,age) values ('zhuzhu',10),('gougou',20); //只向指定的字段插入值
|
|
|
Query OK, 2 rows affected (0.12 sec)
|
|
|
Records: 2 Duplicates: 0 Warnings: 0
|
|
|
```
|
|
|
|
|
|
#### 2.案例
|
|
|
|
|
|
表:school.student2
|
|
|
|
|
|
```shell
|
|
|
字段名 数据类型
|
|
|
编号 id int
|
|
|
姓名 name varchar(50)
|
|
|
出生年份 born_year year
|
|
|
生日 birthday date
|
|
|
上课时间 class_time time
|
|
|
注册时间 reg_time datetime
|
|
|
```
|
|
|
|
|
|
创建表:
|
|
|
|
|
|
```shell
|
|
|
mysql> create table student2(
|
|
|
id int,
|
|
|
name varchar(50),
|
|
|
born_year year,
|
|
|
birthday date,
|
|
|
class_time time,
|
|
|
reg_time datetime
|
|
|
);
|
|
|
```
|
|
|
|
|
|
插入数据:
|
|
|
|
|
|
```shell
|
|
|
mysql> insert into student2 values(1,'tom',now(),now(),now(),now());
|
|
|
mysql> insert into student2 values(2,'jack',1982,19821120,123000,20140415162545);
|
|
|
```
|
|
|
|
|
|
表:school.student3
|
|
|
|
|
|
```shell
|
|
|
id id int
|
|
|
姓名 name varchar(50)
|
|
|
性别 sex enum('male','female')
|
|
|
爱好 hobby set('music','book','game','disc')
|
|
|
```
|
|
|
|
|
|
创建表:
|
|
|
|
|
|
```shell
|
|
|
mysql> create table student3(
|
|
|
id int,
|
|
|
name varchar(50),
|
|
|
sex enum('male','female'),
|
|
|
hobby set('music','book','game','disc')
|
|
|
);
|
|
|
```
|
|
|
|
|
|
查看表结构:
|
|
|
|
|
|
```shell
|
|
|
mysql> desc student3;
|
|
|
mysql> show create table student3\G
|
|
|
```
|
|
|
|
|
|
插入数据:
|
|
|
|
|
|
```shell
|
|
|
mysql> insert into student3 values (1,'tom','male','book,game');
|
|
|
mysql> insert into student3 values (2,'jack','male','film');
|
|
|
```
|
|
|
|
|
|
注意:
|
|
|
|
|
|
DESCRIBE查看表结构
|
|
|
|
|
|
```shell
|
|
|
DESCRIBE 表名;
|
|
|
DESC 表名;
|
|
|
```
|
|
|
|
|
|
查看表详细结构
|
|
|
|
|
|
```shell
|
|
|
SHOW CREATE TABLE 表名;
|
|
|
```
|
|
|
|
|
|
## 三:表完整性约束
|
|
|
|
|
|
#### 1.作用
|
|
|
|
|
|
用于保证数据的完整性和一致性
|
|
|
|
|
|
#### 2.约束条件
|
|
|
|
|
|
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
|
|
|
|
|
|
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表(父表主键/子表1外键/子表2外键)之间的关联
|
|
|
|
|
|
NOT NULL 标识该字段不能为空
|
|
|
|
|
|
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
|
|
|
|
|
|
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
|
|
|
|
|
|
DEFAULT 为该字段设置默认值
|
|
|
|
|
|
注意:
|
|
|
|
|
|
是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
|
|
|
|
|
|
字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> sex enum('male','female') not null default 'male'
|
|
|
MySQL [(none)]> age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
|
|
|
```
|
|
|
|
|
|
是否是key 主键 primary key 外键 forengn key
|
|
|
|
|
|
#### 3.NOT NULL
|
|
|
|
|
|
表:school.student4
|
|
|
|
|
|
创建表:(注意前提需要有库)
|
|
|
|
|
|
```shell
|
|
|
mysql> create table school.student4(
|
|
|
id int not null,
|
|
|
name varchar(50) not null,
|
|
|
sex enum('m','f') default 'm' not null,
|
|
|
age int unsigned default 18 not null,
|
|
|
hobby set('music','disc','dance','book') default 'book,dance'
|
|
|
);
|
|
|
```
|
|
|
|
|
|
插入数据:(注意观察查询到的数据)
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> insert into school.student4(id,name) values(2,'robin');
|
|
|
Query OK, 1 row affected (0.08 sec)
|
|
|
|
|
|
MySQL [(none)]> select * from school.student4;
|
|
|
+----+-------+-----+-----+------------+
|
|
|
| id | name | sex | age | hobby |
|
|
|
+----+-------+-----+-----+------------+
|
|
|
| 2 | robin | m | 18 | dance,book |
|
|
|
+----+-------+-----+-----+------------+
|
|
|
1 row in set (0.00 sec)
|
|
|
```
|
|
|
|
|
|
注意报错的原因:
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> insert into school.student4 values(3,NULL,'m',40,'book');
|
|
|
ERROR 1048 (23000): Column 'name' cannot be null
|
|
|
```
|
|
|
|
|
|
#### 4.唯一约束
|
|
|
|
|
|
作用:
|
|
|
|
|
|
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度
|
|
|
|
|
|
表:company.department1
|
|
|
|
|
|
创建表:
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> create database company;
|
|
|
Query OK, 1 row affected (0.01 sec)
|
|
|
MySQL [(none)]> CREATE TABLE company.department1 (dept_id INT,dept_name VARCHAR(30) UNIQUE,comment VARCHAR(50));
|
|
|
Query OK, 0 rows affected (0.34 sec)
|
|
|
```
|
|
|
|
|
|
查看表结构:
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> desc company.department1;
|
|
|
+-----------+-------------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-----------+-------------+------+-----+---------+-------+
|
|
|
| dept_id | int(11) | YES | | NULL | |
|
|
|
| dept_name | varchar(30) | YES | UNI | NULL | |
|
|
|
| comment | varchar(50) | YES | | NULL | |
|
|
|
+-----------+-------------+------+-----+---------+-------+
|
|
|
3 rows in set (0.00 sec)
|
|
|
```
|
|
|
|
|
|
数据插入:(注意查看插入数据时的提示)
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> insert into company.department1 values ("1","xingdian","hr");
|
|
|
Query OK, 1 row affected (0.04 sec)
|
|
|
|
|
|
MySQL [(none)]> insert into company.department1 values ("1","xingdian","hr");
|
|
|
ERROR 1062 (23000): Duplicate entry 'xingdian' for key 'dept_name'
|
|
|
```
|
|
|
|
|
|
#### 5.主键约束
|
|
|
|
|
|
注意:primary key 字段的值是不允许重复,且不允许不NULL(UNIQUE + NOT NULL)
|
|
|
|
|
|
表:school.student6
|
|
|
|
|
|
创建表:
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> create table school.student6(
|
|
|
-> id int primary key not null auto_increment,
|
|
|
-> name varchar(50) not null,
|
|
|
-> sex enum('male','female') not null default 'male',
|
|
|
-> age int not null default 18
|
|
|
-> );
|
|
|
Query OK, 0 rows affected (0.47 sec)
|
|
|
```
|
|
|
|
|
|
插入数据:
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> insert into school.student6 values (1,'alice','female',22);
|
|
|
Query OK, 1 row affected (0.18 sec)
|
|
|
|
|
|
MySQL [(none)]> insert into school.student6(name,sex,age) values
|
|
|
-> ('jack','male',19),
|
|
|
-> ('tom','male',23);
|
|
|
Query OK, 2 rows affected (0.14 sec)
|
|
|
Records: 2 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
MySQL [(none)]> select * from school.student6;
|
|
|
+----+-------+--------+-----+
|
|
|
| id | name | sex | age |
|
|
|
+----+-------+--------+-----+
|
|
|
| 1 | alice | female | 22 |
|
|
|
| 2 | jack | male | 19 |
|
|
|
| 3 | tom | male | 23 |
|
|
|
+----+-------+--------+-----+
|
|
|
3 rows in set (0.00 sec)
|
|
|
|
|
|
```
|
|
|
|
|
|
## 四:修改表
|
|
|
|
|
|
语法格式:
|
|
|
|
|
|
修改表名
|
|
|
|
|
|
ALTER TABLE 表名 RENAME 新表名;
|
|
|
|
|
|
增加字段
|
|
|
|
|
|
ALTER TABLE 表名
|
|
|
|
|
|
ADD 字段名 数据类型 [完整性约束条件…],
|
|
|
|
|
|
ADD 字段名 数据类型 [完整性约束条件…];
|
|
|
|
|
|
ALTER TABLE 表名
|
|
|
|
|
|
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
|
|
|
删除字段
|
|
|
|
|
|
ALTER TABLE 表名 DROP 字段名;
|
|
|
|
|
|
修改字段
|
|
|
|
|
|
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
|
|
|
|
|
|
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
|
|
|
|
|
|
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
|
|
|
|
|
|
#### 1.修改数据库引擎
|
|
|
|
|
|
```shell
|
|
|
mysql> alter table service engine=innodb; //engine=myisam|memory|....
|
|
|
```
|
|
|
|
|
|
#### 2.添加字段
|
|
|
|
|
|
```shell
|
|
|
mysql> create table student10 (id int);
|
|
|
mysql> alter table student10 add name varchar(20) not null, add age int not null default 22;
|
|
|
|
|
|
mysql> alter table student10 add stu_num int not null after name; //添加name字段之后
|
|
|
|
|
|
mysql> alter table student10 add sex enum('male','female') default 'male' first; //添加到最前面
|
|
|
```
|
|
|
|
|
|
#### 3.删除字段
|
|
|
|
|
|
```shell
|
|
|
mysql> alter table student10 drop sex;
|
|
|
```
|
|
|
|
|
|
#### 4.修改字段类型
|
|
|
|
|
|
```shell
|
|
|
MySQL [school]> desc student10;
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
| id | int(11) | YES | | NULL | |
|
|
|
| age | int(11) | YES | | NULL | |
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
2 rows in set (0.01 sec)
|
|
|
|
|
|
MySQL [school]> alter table student10 modify age tinyint not null ;
|
|
|
Query OK, 0 rows affected (0.04 sec)
|
|
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
MySQL [school]> desc student10;
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| id | int(11) | YES | | NULL | |
|
|
|
| age | tinyint(4) | NO | | NULL | |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
2 rows in set (0.00 sec)
|
|
|
|
|
|
MySQL [school]> alter table student10 modify id int not null primary key ; ////修改字段类型、约束、主键
|
|
|
Query OK, 0 rows affected (0.02 sec)
|
|
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
MySQL [school]> desc student10;
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| id | int(11) | NO | PRI | NULL | |
|
|
|
| age | tinyint(4) | NO | | NULL | |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
```
|
|
|
|
|
|
#### 5.增加约束
|
|
|
|
|
|
```shell
|
|
|
MySQL [school]> alter table student10 modify id int not null primary key ;
|
|
|
Query OK, 0 rows affected (0.02 sec)
|
|
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
MySQL [school]> desc student10;
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| id | int(11) | NO | PRI | NULL | |
|
|
|
| age | tinyint(4) | NO | | NULL | |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
2 rows in set (0.00 sec)
|
|
|
|
|
|
MySQL [school]> alter table student10 modify id int not null primary key auto_increment;
|
|
|
ERROR 1068 (42000): Multiple primary key defined //错误,该字段已经是primary key
|
|
|
|
|
|
MySQL [school]> alter table student10 modify id int not null auto_increment;
|
|
|
Query OK, 0 rows affected (0.04 sec)
|
|
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
MySQL [school]> desc student10;
|
|
|
+-------+------------+------+-----+---------+----------------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+------------+------+-----+---------+----------------+
|
|
|
| id | int(11) | NO | PRI | NULL | auto_increment |
|
|
|
| age | tinyint(4) | NO | | NULL | |
|
|
|
+-------+------------+------+-----+---------+----------------+
|
|
|
```
|
|
|
|
|
|
#### 6.增加主键
|
|
|
|
|
|
```shell
|
|
|
MySQL [school]> desc student1;
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
| id | int(11) | YES | | NULL | |
|
|
|
| age | int(11) | YES | | NULL | |
|
|
|
| name | char(1) | YES | | NULL | |
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
3 rows in set (0.00 sec)
|
|
|
|
|
|
MySQL [school]> alter table student1 add primary key(id);
|
|
|
|
|
|
MySQL [school]> desc student1;
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
| id | int(11) | NO | PRI | NULL | |
|
|
|
| age | int(11) | YES | | NULL | |
|
|
|
| name | char(1) | YES | | NULL | |
|
|
|
+-------+---------+------+-----+---------+-------+
|
|
|
3 rows in set (0.00 sec)
|
|
|
```
|
|
|
|
|
|
#### 7.修改主键和自增
|
|
|
|
|
|
```shell
|
|
|
MySQL [school]> alter table student1 modify id int auto_increment;
|
|
|
Query OK, 0 rows affected (0.03 sec)
|
|
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
MySQL [school]> desc student1;
|
|
|
+-------+---------+------+-----+---------+----------------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+---------+------+-----+---------+----------------+
|
|
|
| id | int(11) | NO | PRI | NULL | auto_increment |
|
|
|
| age | int(11) | YES | | NULL | |
|
|
|
| name | char(1) | YES | | NULL | |
|
|
|
+-------+---------+------+-----+---------+----------------+
|
|
|
```
|
|
|
|
|
|
#### 8.删除主键
|
|
|
|
|
|
```shell
|
|
|
MySQL [school]> desc student10;
|
|
|
+-------+------------+------+-----+---------+----------------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+------------+------+-----+---------+----------------+
|
|
|
| id | int(11) | NO | PRI | NULL | auto_increment |
|
|
|
| age | tinyint(4) | NO | | NULL | |
|
|
|
+-------+------------+------+-----+---------+----------------+
|
|
|
2 rows in set (0.00 sec)
|
|
|
|
|
|
MySQL [school]> alter table student10 drop primary key;
|
|
|
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
|
|
|
|
|
|
删除自增
|
|
|
ySQL [school]> alter table student10 modify id int not null;
|
|
|
Query OK, 0 rows affected (0.04 sec)
|
|
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
MySQL [school]> desc student10;
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| id | int(11) | NO | PRI | NULL | |
|
|
|
| age | tinyint(4) | NO | | NULL | |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
|
|
|
MySQL [school]> alter table student10 drop primary key;
|
|
|
Query OK, 0 rows affected (0.03 sec)
|
|
|
Records: 0 Duplicates: 0 Warnings: 0
|
|
|
|
|
|
MySQL [school]> desc student10;
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
| id | int(11) | NO | | NULL | |
|
|
|
| age | tinyint(4) | NO | | NULL | |
|
|
|
+-------+------------+------+-----+---------+-------+
|
|
|
2 rows in set (0.00 sec)
|
|
|
```
|
|
|
|
|
|
#### 9.复制表
|
|
|
|
|
|
复制表结构+记录 (key不会复制: 主键、外键和索引)复制表结构/记录+表结构,不会将Key复制
|
|
|
|
|
|
```shell
|
|
|
mysql> create table new_service select * from service;
|
|
|
```
|
|
|
|
|
|
只复制表结构
|
|
|
|
|
|
```shell
|
|
|
mysql> create table new1_service select * from service where 1=2; //条件为假,查不到任何记录
|
|
|
```
|
|
|
|
|
|
可以复制主键,只复制表结构
|
|
|
|
|
|
```shell
|
|
|
mysql> create table t4 like employees;
|
|
|
```
|
|
|
|
|
|
#### 10.删除表
|
|
|
|
|
|
```shell
|
|
|
mysql> DROP TABLE 表名;
|
|
|
```
|
|
|
|
|
|
#### 11.修改数据表中字段的值
|
|
|
|
|
|
语法:
|
|
|
|
|
|
Update 表名 set 列名=值where 条件
|
|
|
|
|
|
```shell
|
|
|
mysql> update student set name='123' where id=1;
|
|
|
```
|
|
|
|
|
|
删除某一行:
|
|
|
|
|
|
delete from 表名 where id=1
|
|
|
|
|
|
```shell
|
|
|
mysql> delete from type where id=1;
|
|
|
```
|
|
|
|
|
|
## 五:库操作
|
|
|
|
|
|
#### 1.简介
|
|
|
|
|
|
系统自带库的含义及作用
|
|
|
|
|
|
```shell
|
|
|
MySQL [(none)]> show databases;
|
|
|
+--------------------+
|
|
|
| Database |
|
|
|
+--------------------+
|
|
|
| information_schema |
|
|
|
| mysql |
|
|
|
| performance_schema |
|
|
|
| sys |
|
|
|
+--------------------+
|
|
|
```
|
|
|
|
|
|
information_schema:虚拟库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等
|
|
|
|
|
|
performance_schema:主要存储数据库服务器的性能参数
|
|
|
|
|
|
mysql:授权库,主要存储系统用户的权限信息
|
|
|
|
|
|
sys:主要存储数据库服务器的性能参数
|
|
|
|
|
|
注意:information_schema
|
|
|
|
|
|
SCHEMATA 存放的是系统中的库
|
|
|
|
|
|
```shell
|
|
|
MySQL [information_schema]> select * from information_schema.SCHEMATA;
|
|
|
+--------------+--------------------+----------------------------+------------------------+----------+
|
|
|
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
|
|
|
+--------------+--------------------+----------------------------+------------------------+----------+
|
|
|
| def | information_schema | utf8 | utf8_general_ci | NULL |
|
|
|
| def | mysql | latin1 | latin1_swedish_ci | NULL |
|
|
|
| def | performance_schema | utf8 | utf8_general_ci | NULL |
|
|
|
| def | school | latin1 | latin1_swedish_ci | NULL |
|
|
|
| def | sys | utf8 | utf8_general_ci | NULL |
|
|
|
+--------------+--------------------+----------------------------+------------------------+----------+
|
|
|
|
|
|
目录_名称
|
|
|
实际库_名称
|
|
|
默认_字符_设置_名称
|
|
|
默认_分类_名称
|
|
|
```
|
|
|
|
|
|
TABLES 存储表名
|
|
|
|
|
|
```shell
|
|
|
MySQL [information_schema]> select * from information_schema.TABLES\G
|
|
|
*************************** 283. row ***************************
|
|
|
TABLE_CATALOG: def
|
|
|
TABLE_SCHEMA: xingdian
|
|
|
TABLE_NAME: t1
|
|
|
TABLE_TYPE: BASE TABLE
|
|
|
ENGINE: InnoDB
|
|
|
VERSION: 10
|
|
|
ROW_FORMAT: Dynamic
|
|
|
TABLE_ROWS: 1
|
|
|
AVG_ROW_LENGTH: 16384
|
|
|
DATA_LENGTH: 16384
|
|
|
MAX_DATA_LENGTH: 0
|
|
|
INDEX_LENGTH: 0
|
|
|
DATA_FREE: 0
|
|
|
AUTO_INCREMENT: NULL
|
|
|
CREATE_TIME: 2022-09-22 08:18:38
|
|
|
UPDATE_TIME: 2022-09-22 08:18:54
|
|
|
CHECK_TIME: NULL
|
|
|
TABLE_COLLATION: latin1_swedish_ci
|
|
|
CHECKSUM: NULL
|
|
|
CREATE_OPTIONS:
|
|
|
TABLE_COMMENT:
|
|
|
283 rows in set (0.02 sec)
|
|
|
```
|
|
|
|
|
|
COLUMNS 存储字段
|
|
|
|
|
|
```shell
|
|
|
*************************** 3083. row ***************************
|
|
|
TABLE_CATALOG: def
|
|
|
TABLE_SCHEMA: xingdian
|
|
|
TABLE_NAME: t1
|
|
|
COLUMN_NAME: id
|
|
|
ORDINAL_POSITION: 1
|
|
|
COLUMN_DEFAULT: NULL
|
|
|
IS_NULLABLE: YES
|
|
|
DATA_TYPE: int
|
|
|
CHARACTER_MAXIMUM_LENGTH: NULL
|
|
|
CHARACTER_OCTET_LENGTH: NULL
|
|
|
NUMERIC_PRECISION: 10
|
|
|
NUMERIC_SCALE: 0
|
|
|
DATETIME_PRECISION: NULL
|
|
|
CHARACTER_SET_NAME: NULL
|
|
|
COLLATION_NAME: NULL
|
|
|
COLUMN_TYPE: int(11)
|
|
|
COLUMN_KEY:
|
|
|
EXTRA:
|
|
|
PRIVILEGES: select,insert,update,references
|
|
|
COLUMN_COMMENT:
|
|
|
GENERATION_EXPRESSION:
|
|
|
3083 rows in set (0.03 sec)
|
|
|
```
|
|
|
|
|
|
#### 2.创建库
|
|
|
|
|
|
方案一:交互式操作
|
|
|
|
|
|
```shell
|
|
|
mysql> create database xingdian;
|
|
|
```
|
|
|
|
|
|
数据库命名规则:
|
|
|
|
|
|
区分大小写
|
|
|
|
|
|
唯一性
|
|
|
|
|
|
不能使用关键字如 create select
|
|
|
|
|
|
不能单独使用数字
|
|
|
|
|
|
方案二:非交互式
|
|
|
|
|
|
```shell
|
|
|
mysql -u root -pQianFeng@123 -e "create database diandian"
|
|
|
```
|
|
|
|
|
|
#### 3.查看数据库
|
|
|
|
|
|
```shell
|
|
|
mysql> show databases;
|
|
|
mysql> show create database xingdian;
|
|
|
mysql> select database(); 查看当前所在的库
|
|
|
```
|
|
|
|
|
|
#### 4.切换数据库
|
|
|
|
|
|
```shell
|
|
|
mysql> use xingdian;
|
|
|
```
|
|
|
|
|
|
#### 5.删除数据库
|
|
|
|
|
|
```shell
|
|
|
mysql> DROP DATABASE 数据库名;
|
|
|
```
|