表操作–对表本身操作
创建表CREATE TABLE
语句结构:
CREATE TABLE 表名
(字段名1 数据类型 属性 ,
字段名2 数据类型 属性
)
1.表名要求:英文字符开头,由字母、数字、下划线 组成,英文通常小写。
2.字段之间逗号 隔开,字段名唯一。
3.字段名、数据类型是必须的项,属性不是必须项,中间空格隔开。
4.属性:是否允许空值NULL,默认允许,设置成不允许空值就是用NOT NULL;默认值设置用DEFAULT设置,必须是常数。
例,创建一个表,
解释:
(1)VARCHAR 表示不定长字符串,VARCHAR (225)最大长度可以225;CHAR表示定长字符串。
(2)属性NOT NULL表示该字段不能为空。
(3)DATE是日期型数据
CREATE TABLE pet2
( name VARCHAR(225) NOT NULL,
owner VARCHAR(225) NOT NULL,
species VARCHAR(225),
sex CHAR(1),
birth DATE,
death DATE
);
结果:
检查是否创建上这个表:
SELECT * FROM pet2;
结果:
尝试插入一些数据
INSERT INTO pet2 VALUES('Broswer2','Diane2','dog','m','2000-02-20','2015-08-20');
INSERT INTO pet2(name,owner,species) VALUES('Broswer3',NULL,'dog');
INSERT INTO pet2(name,owner,species,sex) VALUES('Broswer4',NULL,'dog','f');
SELECT * FROM pet2;
结果:
因为onwer设定的时候是要求不能为空。
例2,
CREATE TABLE pet2
(name VARCHAR(225) NOT NULL, #不能为空
owner VARCHAR(225) DEFAULT 'police',
#默认值为police,也可以后期设置为空NULL
species VARCHAR(225),
sex CHAR(1),
birth DATE,
death DATE
);
SELECT * FROM pet2; #结果1
INSERT INTO pet2 VALUES('Broswer2','Diane2','dog','m','2000-02-20','2015-08-20');
INSERT INTO pet2(name,owner,species) VALUES('Broswer3',NULL,'dog');
#这里的NULL就是类似赋值,只要字段没有要求不能为空值(NOT NULL),就可以将字段名设定为空值NULL
INSERT INTO pet2(name,owner,species,sex) VALUES('Broswer4','d2','dog','f');
SELECT * FROM pet2;#结果2
结果1:
结果2:
#与INSRT INTO填充类似的可用更新语句修改部分单元格,比如:
UPDATE pet2
SET owner = NULL
WHERE name = 'broswer4';
SELECT * FROM pet2;
结果:
在cmd中操作sql
1、通过cmd进入mysql
C:\Windows\System32,搜索cmd,或者win+r搜索cmd,转到MySQL安装目录的bin文件夹下
mysql -u root -p #输入密码root@123
结果:
切换到sqllearning数据库,语句USE sqllearning
结果:database changed说明数据库切换成功
创建一个表,用的语句与在navicat一样,在cmd中只要不加分号就代表语句没有结束,此时回车之后也是继续这条语句写,如下:
在表格中插入数据,
查看:
注:
之前在cmd中创建数据库sqllearning,用的语句是CREATE DATEBASE sqllearining
回navicat右键刷新一下,可以看到在cmd中创建的表pet3:
表操作–复制表CREATE TABLE 表名 AS
如果从已知的一张表,我想复制其结构怎么做?
复制表mysql操作语句:
CREATE TABLE 表名 AS 目标二维表;
注:通过select语句得到的就是目标二维表,表结构由select字段决定,表记录由select中的where过滤条件决定。
标准的SQL写法:
SELECT 字段 INTO 新表 FROM 目标表;#但是这种写法在mysql中是禁止的。
例1:
CREATE TABLE pet4
AS
SELECT * FROM pet2;
结果:
例2:
CREATE TABLE pet4
AS
SELECT p2.name,p2.owner FROM pet2 AS p2;
SELECT * FROM pet4;
结果:
例3,只要某个表中的两个字段,但是不要里面的记录,即一个空表,但要字段名。
但字段名和别人一样
CREATE TABLE pet4
AS
SELECT p2.name,p2.owner FROM pet2 AS p2 WHERE 1 = 2 ;
SELECT * FROM pet4 ;
解释:因为SELECT p2.name,p2.owner FROM pet2 AS p2 WHERE 1 = 2中,1=2是一个伪命题,pet2表中没有满足这个条件的数据,所以取出来的数据也是空
结果:
表操作–更新表ALTER TABLE ADD/DROP、MODIFY COLUMN
更新表是对表的结构进行更新,使得其字段名与属性发生改变。
关键字:ALTER TABLE
语句:
ALTER TABLE 表名 + 操作
三种操作:
(1)添加字段ADD
使用:
ALTER TABLE 表名 ADD 字段名 数据类型 属性;
(2)删除一个或多个字段DROP(或者用DROP COLLUMN),字段名用逗号连接
使用:
ALTER TABLE 表名 DROP 字段名;
ALTER TABLE 表名 DROP COLUMN 字段名;
(3)修改字段MODIFY COLUMN
使用:
ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型 属性;
注:表更改不能撤销,建议做完整备份
例,添加表中的字段
#更新表,增加字段
ALTER TABLE pet4 ADD sex CHAR(1);
ALTER TABLE pet4 ADD birth DATE NOT NULL;
SELECT * FROM pet4;
结果:
例:删除表字段
ALTER TABLE pet4 DROP birth ;
SELECT * FROM pet4;
结果:
例:删除两个字段,两个DROP
ALTER TABLE pet4 DROP birth, DROP sex;
SELECT * FROM pet4;
例:DROP COLUMN
ALTER TABLE pet4 DROP COLUMN birth;
SELECT * FROM pet4;
例:修改属性
原来sex的属性是CHAR(1),现在改为VARCHAR(255).
原来:
修改代码:
ALTER TABLE pet4 MODIFY COLUMN sex VARCHAR(255);
结果:
查看一下:
将数据类型改回CHAR(1),并且增加属性NOT NULL
ALTER TABLE pet4
MODIFY COLUMN sex CHAR(1) NOT NULL ;
结果:
查看:(右键–设计表)
表操作–删除表
删除表–语句:
DROP TABLE 表名;
注:DROP TABLE没有确认、没有撤销、永久删除,建议做完整备份。
例:
DROP TABLE pet4;
结果:
表操作–表名重命名RENAME TABLE
语句:
RENAME TABLE 表名1 TO 新表名1,表名2 TO 新表名2,…;
注:可以批量修改,从左往右依次进行。
例:
#更新表,增加字段
ALTER TABLE pet4 ADD sex CHAR(1);
SELECT * FROM pet4;
结果:
例:
ALTER TABLE pet4 ADD birth DATE NOT NULL;
此时,下图位置右键刷新一下
出现pet4表,选中pet4右键–设计表,查看表的结构,如下: