diff --git "a/49 \346\235\216\350\210\222\346\261\266/MySQL.md" "b/49 \346\235\216\350\210\222\346\261\266/MySQL.md" new file mode 100644 index 0000000000000000000000000000000000000000..9be14a09863ae984dbbf406ce61caffba1409fc9 --- /dev/null +++ "b/49 \346\235\216\350\210\222\346\261\266/MySQL.md" @@ -0,0 +1,802 @@ +* 数据库是什么?? + + 1.存储数据的地方 + + 2.DB:数据库(Database) + +* 为什么要用数据库? + + 1.因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了能够永久保存数据。当然这里指的是非内存数据库。 + + 2.用普通文件存储行不行?把数据写入到硬盘上的文件中,当然可以实现持久化的目标,但是不利于后期的检索和管理等。 + +* 数据库分类 + + * 早期:层次模型、网状模型、关系模型, + + * 随着时间的推移和市场竞争,最终,基于关系模型的关系型数据库获得了绝对市场份额。 + + * 目前市场上主要分: + + * 关系型数据库、非关系型数据库两大类 + +什么是关系型数据库和非关系数据库? + +* **关系型数据库**,采用关系模型来组织数据,简单来说,**关系模型指的就是二维表格模型**。类似于Excel工作表。 + +**非关系型数据库**,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。 + +**MySQL的优点** + +* 可移植性:MySQL数据库几乎支持所有的操作系统 +* 免费:MySQL的社区版完全免费,一般中小型网站的开发都选择 MySQL 作为网站数据库。 +* 开源:2000 年,MySQL公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源的世界。 +* 关系型数据库:MySQL可以利用标准SQL语法进行查询和操作。 +* 速度快、体积小、容易使用:从2009年开始,阿里的“去IOE”(去掉IBM的小型机、Oracle的数据库、EMC的存储设备)备受关注,淘宝DBA团队再次从Oracle转向MySQL,其他使用MySQL数据库的公司还有Facebook、Twitter、YouTube、百度、腾讯、去哪儿、魅族等等,自此,MySQL在市场上占据了很大的份额。 +* 安全性和连接性:所有的密码传输均采用加密形式,从而保证了密码安全。由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提高数据共享的效率。 +* 丰富的接口:提供了用于C、C++、Java、PHP、Python、Ruby和Eiffel、Perl等语言的API。 +* 灵活:能够适应高要求的环境。可嵌入到应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。 +* MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离。这种处理和存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。MySQL中同一个数据库,不同的表格可以选择不同的存储引擎。其中使用最多的是InnoDB 和MyISAM,MySQL5.5之后InnoDB是默认的存储引擎。 + +**表的关系**:表之间的关系分为一对一关系、一对多关系和多对多关系。 + +``` + +``` + +SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。 + +SQL的分类 + +| 名称 | 解释 | 命令 | +| ---------------- | ----------------------- | ---------------------------------------- | +| DDL (数据定义语言) 20% | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | +| DML (数据操作语言) 30% | 用于操作数据库对象中所包含的数据 | 增加(insert),修改(update),删除(delete), 数据 | +| DQL (数据查询语言) 50% | 用于查询数据库数据 | 查(select) | +| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | + +其他语句:USE语句,SHOW语句,SET语句等。这类的官方文档中一般称为命令。 + +SQL语法规范 + +(1)mysql的sql语法不区分大小写 + +* A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则 。排序 + +​ ci(大小写不敏感),cs(大小写敏感),_bin(二进制,即比较是基于字符编码的值而与language无关,区分大小写) + +* B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。 + +(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 + +(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) + +(4)数据库和表名、字段名等对象名中间不要包含空格 + +(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 + +``` + +``` + +SQL脚本中如何加注释 + +* 单行注释:#注释内容(mysql特有的) + +* 单行注释:--空格注释内容 其中--后面的空格必须有 + +* 多行注释:/* 注释内容 */ + +mysql脚本中标点符号的要求如下: + +1. 本身成对的标点符号必须成对,例如:(),'',""。 + +2. 所有标点符号必须英文状态下半角输入方式下输入。 + +几个特殊的标点符号: + +1. 小括号(): + + * 在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。 + * 思考: 2+3 * 6 =20 和 (2+3) * 6 =30的区别 + +2. 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 + +3. “2023-10--10” + +4. 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。 + +5. 在MySQL中双引号通常等价于单引号 + +6. create table tt( + + id int + ; + + ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2 + + create table temp( + + c char + + ); + insert into temp values('尚) ; #缺一半单引号 + + insert into temp values(‘尚’) ; #标点符号是中文 + + mysql> select * from student; + +------+------+ + | id | name | + +------+------+ + | 1 | 张三 | + | 2 | 李四 | + +------+------+ + 2 rows in set (0.00 sec) + + mysql> select id "学号",name "姓名" from student; + +------+------+ + | 学号 | 姓名 | + +------+------+ + | 1 | 张三 | + | 2 | 李四 | + +------+------+ + 2 rows in set (0.00 sec) + +数值类型:包括整数和小数 + +数值类型主要用来存储数字,不同的数值类型提供不同的取值范围,可以存储的值范围越大,所需要的存储空间也越大。 + +对于MySQL中的数值类型,还要做如下说明: + +* 关键字INT是INTEGER的同义词。 + +* 关键字DEC和FIXED是DECIMAL的同义词。 + + **整数类型** + + ```#演示整数类型 + #演示整数类型 + #创建一个表格,表格的名称“t_int”, + #包含两个字段i1和i2,分别是int和int(2)类型 + #create table t_int(i1 int,i2 int(2)); + create table t_int( + i1 int, + i2 int(2) #没有unsigned zerofill,(2)没有意义 + ); + + #查看当前数据库的所有表格 + show tables; + show tables from 数据库名; + + #查看表结构 + desc 表名称; + desc t_int; + + mysql> desc t_int; + +-------+------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+------+------+-----+---------+-------+ + | i1 | int | YES | | NULL | | + | i2 | int | YES | | NULL | | + +-------+------+------+-----+---------+-------+ + 2 rows in set (0.01 sec) + + #创建一个表格,表格的名称“t_int2”, + #包含两个字段i1和i2,分别是int和int(2)类型 + create table t_int2( + i1 int, + i2 int(2) unsigned zerofill + ); + + mysql> desc t_int2; + +-------+--------------------------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+--------------------------+------+-----+---------+-------+ + | i1 | int | YES | | NULL | | + | i2 | int(2) unsigned zerofill | YES | | NULL | | + +-------+--------------------------+------+-----+---------+-------+ + 2 rows in set (0.01 sec) + + #添加数据到表格中 + insert into 表名称 values(值列表); + insert into t_int values(1234,1234); + insert into t_int2 values(1234,1234); + + #查询数据 + select * from 表名称; + select * from t_int; + select * from t_int2; + + #添加数据到表格中 + insert into 表名称 values(值列表); + insert into t_int values(1,1); + insert into t_int2 values(1,1); + + insert into t_int values(12222228854225548778455,12222228854225548778455); + mysql> insert into t_int values(12222228854225548778455,12222228854225548778455); + ERROR 1264 (22003): Out of range value for column 'i1' at row + ``` + +**小数类型** + +MySQL中使用浮点数和定点数来表示小数。 + +浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 + +* M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 +* D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 + +DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 + +``` +#演示小数类型 +#创建表格 +create table t_double( + d1 double, + d2 double(5,2) #-999.99~999.99 +); + +#查看表结构 +desc t_double; + +#添加数据 +insert into t_double values(2.5,2.5); + +#查看数据 +select * from t_double; +mysql> select * from t_double; ++------+------+ +| d1 | d2 | ++------+------+ +| 2.5 | 2.50 |#d2字段小数点后不够2位用0补充 ++------+------+ +1 row in set (0.00 sec) + +#添加数据 +insert into t_double values(2.5526,2.5526); +insert into t_double values(2.5586,2.5586); + +mysql> select * from t_double; ++--------+------+ +| d1 | d2 | ++--------+------+ +| 2.5 | 2.50 | +| 2.5526 | 2.55 |#小数点后有截断现象,并且会四舍五入 +| 2.5586 | 2.56 |#小数点后有截断现象,并且会四舍五入 ++--------+------+ +3 rows in set (0.00 sec) + + +#添加数据 +insert into t_double values(12852.5526,12852.5526); + +#d2字段整数部分超过(5-2=3)位,添加失败 +mysql> insert into t_double values(12852.5526,12852.5526); +ERROR 1264 (22003): Out of range value for column 'd2' at row 1 + + +#创建表格 +create table t_decimal( + d1 decimal, #没有指定(M,D)默认是(10,0) + d2 decimal(5,2) +); + + +#查看表结构 +desc t_decimal; +mysql> desc t_decimal; ++-------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+---------------+------+-----+---------+-------+ +| d1 | decimal(10,0) | YES | | NULL | | +| d2 | decimal(5,2) | YES | | NULL | | ++-------+---------------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +#添加数据 +insert into t_decimal values(2.5,2.5); + +#查看数据 +select * from t_decimal; +mysql> select * from t_decimal; ++------+------+ +| d1 | d2 | ++------+------+ +| 3 | 2.50 | #d1字段小数点后截断 ++------+------+ +1 row in set (0.00 sec) + +insert into t_decimal values(12852.5526,12852.5526); + +-- 把小数赋值给整数类型的字段时,会截断小数部分,考虑四舍五入 +insert into t_int2 values(1.5,1.5); +``` + +**MySQL的字符串类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。MySQL的字符串类型可以用来存储文本字符串数据,还可以存储二进制字符串**。 + +**CHAR(M)为固定长度的字符串** + +**VARCHAR(M)为可变长度的字符串** + +```日期时间类型 + create table temp( + d1 datetime, + d2 timestamp + ); + + insert into temp values('2021-9-2 14:45:52','2021-9-2 14:45:52'); + + #修改当前的时区 + set time_zone = '+9:00'; + + insert into temp values('202192144552','202192144552'); + #ERROR 1292 (22007): Incorrect datetime value: '202192144552' for column 'd1' at row 1 + + insert into temp values('20210902144552','20210902144552'); + + insert into temp values('2021&9&2 14%45%52','2021#9#2 14@45@52'); + + create table temp( + d year + ); + + insert into temp values(2021); + insert into temp values(85); + insert into temp values(22); + insert into temp values(69); + insert into temp values(0); + insert into temp values('0'); + + mysql> select * from temp; + +------+ + | d | + +------+ + | 2021 | + | 1985 | + | 2022 | + +------+ + 3 rows in set (0.00 sec) +``` + +创建数据库 + + create database 数据库名 ; + create database 数据库名 charset 字符集; + +### 查看所有的数据库 + + show databases; #有一个s,代表多个数据库 + +### 查看某个数据库的详细定义语句 + + show create database 数据库名; + + show create database 数据库名\G + +### 修改数据库编码 + + #修改数据库字符集和校对规则 + ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; + + ALTER DATABASE mxdx_chapter3_two CHARACTER SET utf8 COLLATE utf8_general_ci; + +==**注意,**==修改数据库编码只会影响之后创建的表的默认编码,之前创建的表不会受影响。 + +### 删除数据库 + + drop database 数据库名; + +### 使用数据库 + + use 数据库名; + +### SQL示例演示 + + #演示和数据库相关的DDL语句 + #查看当前登录用户(有权限)查看的所有的数据库 + show databases; + + #如何创建数据库 + create database 数据库名称; + + #例如,创建数据库bookstore + create database bookstore; + + #查看数据库的定义 + show create database 数据库名; + + #例如,查看bookstore数据库的定义信息 + show create database bookstore; + show create database bookstore\G + + *************************** 1. row *************************** + Database: bookstore + Create Database: CREATE DATABASE `bookstore` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ + 1 row in set (0.00 sec) + + #修改数据库的编码字符集和校对规则 + alter database 数据库名称 CHARACTER SET 字符集名称 COLLATE 校对规则 + + #修改bookstore数据库的字符集和校对规则 + alter database bookstore CHARACTER SET Latin1 COLLATE Latin1_general_ci; + #Latin1字符集不支持中文 + + mysql> show create database bookstore; + +-----------+--------------------------------------------+ + | Database | Create Database | + +-----------+----------------------------------------------------+ + | bookstore | CREATE DATABASE `bookstore` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | + +-----------+---------------------------------+ + 1 row in set (0.00 sec) + + + #使用数据库 + use 数据库名; + + #例如:使用bookstore数据库 + use bookstore; + + #创建表格 + create table temp( + s char + ); + + #添加数据 + insert into temp values('a'); + + #查询数据 + mysql> select * from temp; + +------+ + | s | + +------+ + | a | + +------+ + 1 row in set (0.00 sec) + + #添加数据 + insert into temp values('尚'); + + mysql> insert into temp values('尚'); + ERROR 1366 (HY000): Incorrect string value: '\xC9\xD0' for column 's' at row 1 + + #删除数据库 + drop database 数据库名称; + + #例如:删除bookstore数据库 + drop database bookstore; + +## 6.2 和数据表相关的 + +### 查看某个数据库的所有表格 + + use 数据库名; + show tables; + + show tables from 数据库名; + +### 创建表格 + + create table 数据表名称( + 字段名 数据类型, + 字段名 数据类型 + ... + ); + + create table teacher( + tid int, + tname varchar(5), + salary double, + weight double(5,2), + birthday date, + gender enum('男','女'), + blood enum('A','B','AB','O'), + tel char(11) + ); + +### 查看表的详细定义信息,即查看建表语句 + + show create table 表名称; + show create table 表名称\G + + mysql> show create table teacher\G + *************************** 1. row *************************** + Table: teacher + Create Table: CREATE TABLE `teacher` ( + `tid` int(11) DEFAULT NULL, + `tname` varchar(5) DEFAULT NULL, + `salary` double DEFAULT NULL, + `weight` double(5,2) DEFAULT NULL, + `birthday` date DEFAULT NULL, + `gender` enum('男','女') DEFAULT NULL, + `blood` enum('A','B','AB','O') DEFAULT NULL, + `tel` char(11) DEFAULT NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 + 1 row in set (0.00 sec) + +### 修改数据表编码 + + alter table 表名称 convert to character set utf8; + +### 查看表结构 + + desc 表名称; + + mysql> desc teacher; + +----------+------------------------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +----------+------------------------+------+-----+---------+-------+ + | tid | int(11) | YES | | NULL | | + | tname | varchar(5) | YES | | NULL | | + | salary | double | YES | | NULL | | + | weight | double(5,2) | YES | | NULL | | + | birthday | date | YES | | NULL | | + | gender | enum('男','女') | YES | | NULL | | + | blood | enum('A','B','AB','O') | YES | | NULL | | + | tel | char(11) | YES | | NULL | | + +----------+------------------------+------+-----+---------+-------+ + 8 rows in set (0.00 sec) + +### 删除表格,包括表结构和里面的数据 + + drop table 表名称; + +### 修改表结构:删除字段 + + alter table 表名称 drop 【column】 字段名称; + + alter table teacher drop column weight; + +### 修改表结构:增加字段 + + alter table 表名称 add 【column】 字段名称 数据类型; + alter table 表名称 add 【column】 字段名称 数据类型 first; + alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; + + alter table teacher add weight double(5,2); + alter table teacher drop column weight; + + alter table teacher add weight double(5,2) first; + alter table teacher drop column weight; + + alter table teacher add weight double(5,2) after salary; + alter table teacher drop column weight; + +### 修改表结构:修改字段的数据类型 + + alter table 表名称 modify 【column】 字段名称 新的数据类型; + + mysql> desc teacher; + +----------+------------------------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +----------+------------------------+------+-----+---------+-------+ + | tid | int(11) | YES | | NULL | | + | tname | varchar(5) | YES | | NULL | | + | salary | double | YES | | NULL | | + | weight | double(5,2) | YES | | NULL | | + | birthday | date | YES | | NULL | | + | gender | enum('男','女') | YES | | NULL | | + | blood | enum('A','B','AB','O') | YES | | NULL | | + | tel | char(11) | YES | | NULL | | + +----------+------------------------+------+-----+---------+-------+ + 8 rows in set (0.00 sec) + + mysql> alter table teacher modify column weight double; + Query OK, 0 rows affected (0.01 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> desc teacher; + +----------+------------------------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +----------+------------------------+------+-----+---------+-------+ + | tid | int(11) | YES | | NULL | | + | tname | varchar(5) | YES | | NULL | | + | salary | double | YES | | NULL | | + | weight | double | YES | | NULL | | + | birthday | date | YES | | NULL | | + | gender | enum('男','女') | YES | | NULL | | + | blood | enum('A','B','AB','O') | YES | | NULL | | + | tel | char(11) | YES | | NULL | | + +----------+------------------------+------+-----+---------+-------+ + 8 rows in set (0.00 sec) + +### 修改表结构:修改字段的名称 + + alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; + + mysql> desc teacher; + +----------+------------------------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +----------+------------------------+------+-----+---------+-------+ + | tid | int(11) | YES | | NULL | | + | tname | varchar(5) | YES | | NULL | | + | salary | double | YES | | NULL | | + | weight | double | YES | | NULL | | + | birthday | date | YES | | NULL | | + | gender | enum('男','女') | YES | | NULL | | + | blood | enum('A','B','AB','O') | YES | | NULL | | + | tel | char(11) | YES | | NULL | | + +----------+------------------------+------+-----+---------+-------+ + 8 rows in set (0.00 sec) + + mysql> alter table teacher change tel phone char(11); + Query OK, 0 rows affected (0.01 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> desc teacher; + +----------+------------------------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +----------+------------------------+------+-----+---------+-------+ + | tid | int(11) | YES | | NULL | | + | tname | varchar(5) | YES | | NULL | | + | salary | double | YES | | NULL | | + | weight | double | YES | | NULL | | + | birthday | date | YES | | NULL | | + | gender | enum('男','女') | YES | | NULL | | + | blood | enum('A','B','AB','O') | YES | | NULL | | + | phone | char(11) | YES | | NULL | | + +----------+------------------------+------+-----+---------+-------+ + 8 rows in set (0.00 sec) + +### 修改表结构:修改字段位置 + + alter table 表名称 modify 【column】 字段名称 数据类型 first; + alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; + +### 修改表名称(重命名表) + + alter table 旧表名 rename 【to】 新表名; + rename table 旧表名称 to 新表名称; + +```作业练习 +作业1、创建数据库test01_market + +```mysql +CREATE DATABASE IF NOT EXISTS test01_market; +USE test01_market; +``` + +2、创建表格customers + +| 字段名 | 数据类型 | +| --------- | ----------- | +| c_num | int(11) | +| c_name | varchar(50) | +| c_contact | varchar(50) | +| c_city | varchar(50) | +| c_birth | date | + +```mysql +CREATE TABLE customers( + c_num INT(11), + c_name VARCHAR(50), + c_contact VARCHAR(50), + c_city VARCHAR(50), + c_birth DATE +); +``` + +**要求3:**将c_contact字段移动到c_birth字段后面 + +```mysql +ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; +``` + +**要求4:**将c_name字段数据类型改为 varchar(70) + +```mysql +ALTER TABLE customers MODIFY c_name VARCHAR(70); +``` + +**要求5:**将c_contact字段改名为c_phone + +```mysql +ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); +``` + +**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) + +```mysql +ALTER TABLE customers ADD c_gender CHAR AFTER c_name; +``` + +**要求7:**将表名改为customers_info + +```mysql +ALTER TABLE customers RENAME TO customers_info; +``` + +**要求8:**删除字段c_city + +```mysql +ALTER TABLE customers_info DROP c_city; +``` + +## 第2题 + +1、创建数据库test02_library + +```mysql +CREATE DATABASE test02_library; +USE test02_library; +``` + +2、创建表格books + +| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | +| ------- | ---- | ------------ | ---- | --- | +| b_id | 书编号 | int(11) | 否 | 是 | +| b_name | 书名 | varchar(50) | 否 | 否 | +| authors | 作者 | varchar(100) | 否 | 否 | +| price | 价格 | float | 否 | 否 | +| pubdate | 出版日期 | year | 否 | 否 | +| note | 说明 | varchar(100) | 是 | 否 | +| num | 库存 | int(11) | 否 | 否 | + +```mysql +CREATE TABLE books( + b_id INT(11) NOT NULL UNIQUE COMMENT '书编号', + b_name VARCHAR(50) NOT NULL COMMENT '书名', + `authors` VARCHAR(100) NOT NULL COMMENT '作者', + price FLOAT NOT NULL COMMENT '价格', + pubdate YEAR NOT NULL COMMENT '出版日期', + note VARCHAR(100) COMMENT '说明', + num INT(11) NOT NULL COMMENT '库存' +); +``` + +3、向books表中插入记录 + +| b_id | b_name | authors | price | pubdate | note | num | +| ---- | ------------- | --------------- | ----- | ------- | -------- | --- | +| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | +| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | +| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | +| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | +| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | +| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | +| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | + +1) 指定所有字段名称插入第一条记录 + +```mysql +INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) VALUES(1,'Tal of AAA','Dickes',23,'1995','novel',11); +``` + +2)不指定字段名称插入第二记录 + +```mysql +INSERT INTO books VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22); +``` + +3)同时插入多条记录(剩下的所有记录) + +```mysql +INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) +VALUES(3,'Story of Jane','Jane Tim',40,'2001','novel',0), +(4,'Lovey Day','George Byron',20,'2005','novel',30), +(5,'Old land','Honore Blade',30,'2010','law',0) +(6,'The Battle','Upton Sara',30,'1999','medicine',40), +(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); +``` + +4、将小说类型(novel)的书的价格都增加5。 + +```mysql +UPDATE books set price = price+5 where note = 'novel'; +``` + +5、将名称为EmmaT的书的价格改为40。 + +```mysql +UPDATE books set price = 40 WHERE b_name = 'EmmaT'; +``` + +6、删除库存为0的记录 + +```mysql +DELETE FROM books WHERE num = 0; +``` + +``` + +```