1准备
目标
- MySQL 基础 (二)- 表操作
- 190301,22:00止
内容(资料同1)
1. MySQL表数据类型
2. 用SQL语句创建表 语句解释 设定列类型 、大小、约束 设定主键
3. 用SQL语句向表中添加数据 语句解释 多种添加方式(指定列名;不指定列名)
4. 用SQL语句删除表 语句解释 DELETE DROP TRUNCATE 不同方式的区别
5. 用SQL语句修改表 修改列名 修改表中数据 删除行 删除列 新建列 新建行
作业
项目三:超过5名学生的课(难度:简单)
项目四:交换工资(难度:简单)
2学习
1. MySQL表数据类型
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值:
- MySQL支持所有标准SQL数值数据类型。包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
- 关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
日期/时间:
- 表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
- 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
字符串(字符)类型:
- 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
- CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
- BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
- BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
- 有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
2. 用SQL语句创建表
创建表时需要给出的信息:表名、表字段名、定义每个表字段
CREATE TABLE table_name (column_name column_type);
实例分析:在 RUNOOB 数据库中创建数据表runoob_tbl:
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
- PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
- ENGINE 设置存储引擎,CHARSET 设置编码。
通过 mysql> 命令窗口可以很简单的创建MySQL数据表。你可以使用 SQL 语句 CREATE TABLE来创建数据表。
root@host# mysql -u root -p
Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE runoob_tbl(
-> runoob_id INT NOT NULL AUTO_INCREMENT,
-> runoob_title VARCHAR(100) NOT NULL,
-> runoob_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( runoob_id )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)
mysql>
3. 用SQL语句向表中添加数据
MySQL 表中使用INSERT INTO SQL语句来插入数据。
语法:如果数据是字符型,必须使用单引号或者双引号,如:"value"。
-- 插入单行;
INSERT INTO table_name(field1, field2,...fieldN)
VALUES (value1, value2,...valueN);
-- 插入多行;
INSERT INTO table_name(field1, field2,...fieldN)
VALUES (value1, value2,...valueN),
(value1, value2,...valueN),
...;
如果要为表中所有列指定值,则可以忽略 INSERT 语句中的列名:
-- 插入单行;
INSERT INTO table_name
VALUES (value1, value2,...valueN);
-- 插入多行;
INSERT INTO table_name
VALUES (value1, value2,...valueN),
(value1, value2,...valueN),
...;
4. 用SQL语句删除表 语句解释 DELETE DROP TRUNCATE 不同方式的区别
进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。
4.1 delete
1、删除整张表的数据:
delete from table_name;
2、删除部分数据,添加where子句:
delete from table_name where...;
3、说明
- 属于DML语言,每次删除一行,都在事务日志中为所删除的每行记录一项。产生rollback,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发,如果删除大数据量的表速度会很慢。
- 删除表中数据而不删除表的结构(定义),同时也不释放空间。
4.2 truncate
1、只能操作表,将表中数据全部删除,在功能上和不带where子句的delete语句相同:
truncate table table_name;
2、说明
- 默认情况下,truncate通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。所以使用的系统和事务日志资源少,可以使用reuse storage; truncate会将高水线复位(回到最开始).
- truncate是DDL语言, 操作立即生效,自动提交,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
- 删除内容、释放空间但不删除表的结构(定义)。
4.3drop
1、drop语句将删除表的结构,以及被依赖的约束(constrain),触发器(trigger),索引(index);
drop table table_name;
2、说明
- 删除之后,依赖于该表的存储过程/函数将保留,但是变为invalid状态.
- drop也属于DDL语言,立即执行,执行速度最快
- 删除内容和定义,释放空间。
4.3区别
1)表和索引所占空间:
- 当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小;
- DELETE操作不会减少表或索引所占用的空间;
- DROP语句将表所占用的空间全释放掉。
2)应用范围:
- TRUNCATE 只能对table;
- DELETE可以是table和view。
3)执行速度:drop > truncate > delete
4)delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
5)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
6)当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
7)如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变;使用truncate删除之后,种子会恢复到初始值。
5. 用SQL语句修改表 修改列名 修改表中数据 删除行 删除列 新建列 新建行
--修改表名
ALTER TABLE courses RENAME TO COURSES;
-- 修改列
ALTER TABLE courses RENAME COLUMN class TO CLASS ;
-- 修改表中的数据
UPDATE courses SET CLASS='math' WHERE student='D';
-- 删除列
ALTER TABLE courses DROP COLUMN student;
--删除行
DELETE FROM courses WHERE student='I';
--新建行
INSERT INTO courses VALUES('A', 'Math');
--新建列
ALTER TABLE courses ADD gender CHAR(2);
参考