0
点赞
收藏
分享

微信扫一扫

对表的操作命令

花姐的职场人生 2022-03-14 阅读 42

一、创建表格

Create table 表名(
字段名(就是列名)  数据类型(长度)  约束条件(可省略) comment “注释”,
字段名(就是列名)  数据类型(长度)  约束条件(可省略)
);

注意:

二、数据类型

一、数值类型

类型大小描述
tinyint1 bytes小整数值
smallint2 bytes大整数值
meniumint3 bytes大整数值
int或interger4 bytes大整数值
bigint8 bytes极大整数值
float4 bytes单精度浮点数
double8 bytes双精度浮点数
decimal小数值(精确定点数)

二、字符串类型

类型大小描述
char0-255 bytes定长字符串
varchar0-65535 bytes变长字符串
tinyblob0-255 bytes不超过255字符的二进制数据
tinytext0-255 bytes短文本字符串
blob0-65535 bytes二进制形式的长文本数据
text0-65535 bytes长文本数据
mediumblob0-16777215 bytes二进制形式的中等长度文本数据
mediumtext0-16777215 bytes中等长度文本数据
longblob0-4294967295 bytes二进制形式的极大文本数据
longtext0-4294967295 bytes极大文本数据

日期时间类型

类型大小范围格式描述
date31000-01-01 至9999-12-31YYYY - MM - DD日期值
time3-838:59:59 至838:59:59HH : MM : SS时间值或持续时间
year11901至2155YYYY年份值
datetime81000-01-01 00:00:00至9999-12-31 23:59:59YYYY - MM - DD HH : MM : SS混合日期和时间值
timestamp41970-01-01 00:00:01 至2038-01-19 03:14: 07YYYY - MM - DD HH : MM :SS混合日期和时间值,时间戳

注意:

字符串类型:
      varchar:长度可变,不留空格,节省空间
      char :长度不可变,输入长度不够,则在后面用空格补齐,效率较高,不灵活
      例子:定义一个字符串类型的变量,规定长度为10,输入一个5长度的字符串 hello
           使用varchar:长度变为5
           使用char :长度不变,剩余五位长度用空格补齐
数值型:
    TINYINTsmallint (short)、INTBIGINT(long)、FLOATDOUBLE
    DOUBLE类型定义:DOUBLE(总长度,小数点位数)
逻辑型:
    BIT01)
日期型:
DATE:         年月日
    TIME:         时分秒
    DATETIME:     包含时间和日期,如果输入空值,则字段为空
    TIMESTAMP:   包含时间和日期,如果输入空值,则默认调用当前系统时间

三、删除表格

drop table 表名称;  -- 删除指定表格
drop table if exists 表名称;   -- 如果指定的表存在,则删除表
truncate table 表名称;    -- 删除指定表,并重新创建该表

四、修改表格

alter table 表名 rename to 新表名;          -- 修改表名称
reanme table 表名 to 新表名;                -- 修改表名
alter table 表名 add 新列名 类型长度 [约束];          -- 添加列
alter table 表名 add 新列名 类型长度 [约束] after 字段名;  -- 在指定字段后添加新列
alter table 表名 add 新列名 类型长度 [约束] first;     -- 在首行添加新字段 
alter table 表名 drop 字段;          	-- 删除指定字段
alter table 表名 drop primary key;      -- 删除主键
-- 注意:当带有主键的列还有auto_increment属性,则需要间接方式才能删除主键
-- 解决方法:1. 先修改字段的约束 2. 删除主键
alter table 表名 modify 字段 类型长度;  alter table 表名 drop primary key;
alter table 表名 modify 字段 类型长度 default 默认值;  -- 为字段设置默认值
alter table 表名 modify 字段 类型长度 [约束]; -- 修改字段类型或约束
alter table 表名 change 旧字段 新字段 类型长度 [约束];  -- 修改字段名
alter table 表名 charcter set 编码格式;   -- 修改表编码格式

注意:

五、对表中数据进行操作

一、在表中插入数据

1、给指定字段添加数据

insert into 表名(字段1,字段2...) values(列名对应的内容,列名对应的内容.....; -- 插入的类型必须与此处表列出的顺序一致
如:
insert into emp(name, age, gender, salary, join_date, dep_id) VALUES ('赵敏',22,'女','2000-01-07',5500,6); -- 报错Data truncated for column 'salary' at row 1,因为列出的顺序是salary, join_date,插入的却是'2000-01-07',5500
正确的写法:
insert into emp(name, age, gender, salary, join_date, dep_id) VALUES ('赵敏',22,'女',5500,'2000-01-07',6);

2、给全部数据添加数据

insert into 表名 values(1,值2...);
insert into emp VALUES ('张无忌',22,'男','2000-01-07',5500,6);

3、批量添加数据

insert into 表名(字段1,字段2...) values(1,值2...),(1,值2...),(1,值2...),(1,值2...);insert into 表名 values(1,值2...),(1,值2...),(1,值2...),(1,值2...);

INSERT INTO emp(name, age, gender, salary, join_date, dep_id)
VALUES ('张三丰', 20, '男', 8000, '2002-01-01', 1),
       ('风清扬', 21, '男', 8800, '2001-01-01', 1),
       ('聂小倩', 18, '女', 8000, '2004-01-01', 2),
       ('诸葛亮', 25, '男', 12000, '2007-01-01', 4),
       ('扫地僧', 50, '男', 8000, '2002-01-01', 3),
       ('曹总', 20, '男', 38000, '2012-01-01', 5),
       ('小红', 20, '女', 1000, '2002-01-01', 6),
       ('小青', 20, '女', 8000, '2002-01-01', 2),
       ('小白', 20, '女', 8000, '2012-01-01', null);

标识列/自动增长列的插入方式,有以下4种

INSERT INTO 表名VALUES(NULL,列名对应的内容,列名对应的内容);-- 注意:若设计表时把其设置为主键,不能使用null

INSERT INTO 表名VALUES(0,1,值2...);

INSERT INTO 表名VALUES(DEFAULT,1,值2...);

Insert into 表名(字段1,字段2...values(值1,值2...;-- 有哪些列名就插入哪些数据

注意:

  • 插入数据时,指定的字段顺序必须与值的顺序是一 一对应的
  • 字符串和日期类型数据都应该用引号括起来
  • 插入数据的大小,应该在字段的规定范围内

二、删除数据

delete from 表名 where 条件;

注意:如果没有加上条件限制范围,将把所有数据都删除

三、修改数据

update 表名 set 要修改的内容 where 条件;
Update user set age=20, address=’北海’ where name = ‘张三’;

注意:如果没有加上条件限制范围,将把所有数据都修改

四、设置主键的方式

创建表格的同时在字段后面设置

create table 表名 (字段1 类型长度 primary key,字段2 类型长度 约束, ...);
create table 表名 (字段1 类型长度 约束,字段2 类型长度 约束,... primary key (字段1,字段2)-- 联合主键,同时把字段1,字段2设置为主键。注意:只要两个主键的值加起来不重复,就可以了,比如添加数据(1,张三)和(2,张三)不会主键重复,但是联合主键里面的任何一个值都不能为空

创建完表之后再单独设置主键

create table 表名 (字段1 类型长度 约束,字段2 类型长度 约束, ...);
alter table 表名 add primary key(列名);

使用modify关键字修改字段

alter table 表名 modify 字段 类型长度 约束 primary key;

唯一约束的设置方式与设置主键一致

删除唯一约束

alter table 表名 drop index 列名;

六、DQL–数据查询

select 指定字段 from 表名 where 条件 group by..分组 having 分组后条件 order by 字段 descasclimit 起始索引,每页展示数

一、各关键字的执行顺序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L8c80xyn-1647216345831)(file:///C:\Users\chen\AppData\Local\Temp\ksohtml\wpsF255.tmp.jpg)]

二、查询分类

一、基础查询

  1. 查询多个字段
select 字段列表 from 表名;
示例:
select * from user; -- 查询表中所有数据
  1. 去除重复字段

    select distinct 字段列表 from 表名;
    示例:
    select distinct address from user; -- 查看user表中的地址信息,去除重复项
    
  2. 为表或字段起别名

    as -- as可以省略,但是本名和别名之间必须有空格
    示例:
    select name as 姓名 from user 用户表 -- 为name字段起别名为'姓名',且在表格中展示的也是别名,为user表取别名'用户表',省略as关键字,中间用空格隔开 
    

二、条件查询

select 字段列表 from where 条件;
示例:
SELECT name FROM `user` WHERE address = "北海";   -- 查询地址为北京的人员姓名
-- 查询年龄在300~500岁的人员
SELECT * FROM `user` WHERE age >= 30 && age <= 50; -- 不推荐
SELECT * FROM `user` WHERE age >= 20 AND age <= 50;
SELECT * FROM `user` WHERE age BETWEEN  10 AND 50;
-- 查询年龄为19,18,108的人员
SELECT * FROM `user` WHERE age in(19,18,108);
SELECT * FROM `user` WHERE age = 18 OR age = 19 OR age = 108 -- 不推荐
常用的条件操作符
符号功能
>大于
<小于
>=大于等于
<=小于等于
=等于
<>或!=不等于
between … and …在某个范围内(都包含)
in(…)多选一
like ‘占位符’模糊查询,_表示单个字符,%表示多个字符
is null是null
is not null不是null
and 或 &&并且
or 或 ||或者
not 或 !
-- 查询名字中第二个字为三的人员
SELECT  * FROM `user` WHERE `name` LIKE '_三%'; 
-- 查询张姓人员
SELECT  * FROM `user` WHERE `name` LIKE '张%'; 
-- 查询名字中包含三的人员
SELECT  * FROM `user` WHERE `name` LIKE '%三%'; 

排序查询

select 字段列表 from 表名 order by 排序字段1 [排序方式1],排序字段2 [排序方式2]...;

示例:
-- 按照年龄降序排列
SELECT  * FROM `user` ORDER BY age DESC;
-- 按照年龄升序排列,当年龄相同时,按id降序排列
SELECT  * FROM `user` ORDER BY age ASC,id DESC;
聚合函数
聚合函数分类:
函数名功能
count(列名)统计数量(一般选用不为null的列)
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值
聚合函数语法:
select 聚合函数名(列名) from;--注意:NULL不参与所有聚合函数的运算
-- 统计人员个数,技巧:一般用主键或*号代替列名
SELECT  COUNT(*) FROM `user`;

注意:where后面不能跟聚合函数

分组查询

  1. 分组查询语法
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段 [having 分组后条件过滤];

注意:分组之后,只能查询聚合函数或分组字段,即以什么字段分组,就查询什么字段,否则将报错 (1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘novels.user.address’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by)

-- 以地址为分组查询平均年龄
SELECT address,AVG(age) FROM `user`GROUP BY `address`;

-- 以地址为分组查询年龄在5~120岁之间人员的平均年龄
SELECT address,AVG(age) FROM `user` WHERE age BETWEEN 5 AND 120 GROUP BY `address`;

-- 以地址为分组查询年龄在5~120岁之间人员的平均年龄并以平均年龄降序排列
SELECT address,AVG(age) FROM `user` WHERE age BETWEEN 5 AND 120 GROUP BY `address` ORDER BY AVG(age) DESC;

-- 以地址为分组查询年龄在5~120岁之间人员的平均年龄并以平均年龄
-- 降序排列,只显示分组后平均年龄大于30岁的数据
SELECT address,AVG(age) FROM `user` WHERE age BETWEEN 5 AND 120 GROUP BY `address` HAVING AVG(age) > 30 ORDER BY AVG(age) DESC ;

分页查询

select 字段列表 from 表名 limit 起始索引,每页展示数;

计算公式:起始索引 = (当前页码 - 1) 每页显示条数*

七、约束

约束分类

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束(8.0.16版本之后]保证字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

非空约束

添加约束
--创建表时添加非空约束
CREATE TABLE 表名(列名 数据类型 NOT NULL,...);
--建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
删除约束
ALTIER TABLE 表名 MODIFY 字段名 数据类型;

唯一约束

添加约束
-- 创建表时添加唯一约束
CREATE TABLE 表名(
列名 数据类型 UNIQUE [AUTO_INCREMENT],-- AUTO_INCREMENT:当不指定值时自动增长
    ... 
);
CREATE TABLE 表名(
列名 数据类型,
    ...
 [CONSTRAINT][约束名称]UNIQUE(列名)
);
-- 创建完表后添加唯一纳束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
删除约束
ALTER TABLE 表名 DROP INDEX 字段名;

主键约束

具体语法参考主键设置方式

默认约束

添加约束
--创建表时添加默认约束
CREATE TABLE 表名(
   列名 数据类型 DEFAULT 默认值,
);
-- 建完表后添加默认约束
ALTER TABLE 表名 ALTER 列名 SET DEFAULT默认值;
ALTER TABLE 表名 MODIFY 列名 类型长度 DEFAULT 默认值;
-- 将为age设置默认值
ALTER TABLE emp ALTER age SET DEFAULT 18;
alter table emp modify age int DEFAULT 20;
删除约束
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
ALTER TABLE 表名 MODIFY 列名 类型长度;
-- 删除age默认值
ALTER TABLE emp ALTER age DROP DEFAULT;
alter table emp modify age int;

外键约束

删除/更新行为
行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键。如果有则不允许删除/更新。(与RESTRICT一致)
RESTFCT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删阶/更新。(与NO ACTION一致)
CASCADE当在父表中删除/更新对应记录时。首先检查该记录是否有对应外键。如果有,则也删除/更新外键在子表中的记录。
SET NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许为null) .
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值(innodb不支持)
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键列名〕REFERENCES 主表(主表列名) ON UPDATE CASCADE ON DELETE CASCADE;
                                                
-- 定义外键约束,当删除或更新主表数据时,先检查该记录有无对应外键,有则也删除或更新外键在从表中对应的记录
alter table emp add constraint fk_emp_dept_id foreign key (dep_id) references dept (id) on update cascade on delete cascade;
                                                
-- 定义外键约束,当删除或更新主表数据时,先检查该记录有无对应外键,有则在该字段允许为null的情
-- 况下将外键在从表中对应的记录设为null
alter table emp add constraint fk_emp_dept_id foreign key (dep_id) references dept (id) on update set null on delete set null;         
添加约束
--创建表时添加外键约束
CREATE TABLE表名(
    列名 数据类型,
   [CONSTRAINT][外键名称]FOREIGN KEY (外键列名〕REFERENCES 主表(主表列名)
); 
--建完表后添加外键约束  
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名称) REFERENCES 主表名称(主表列名称);
删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

注意:被关联的表称为主表,关联者称为从表,必须先创建主表,才能创建从表,否则将报错,同理,添加数据的时候也必须先添加主表数据,因为从表数据需要用到主表的数据,主表没有数据,则从表的数据布置从哪里来

-- 删除表,删除表要先删除从表
drop TABLE if EXISTS emp;
drop TABLE if EXISTS dept;
-- 创建表和添加数据要先创建和添加主表,否则报1824 - Failed to open the referenced table 'dept'错误
-- 部门表
CREATE TABLE dept (
  id INT PRIMARY KEY auto_increment, -- 部门编号,主键自增
dep_name VARCHAR ( 20 ), -- 部门名称
  addr VARCHAR ( 20 )
);
-- 员工表
CREATE TABLE emp (
	id INT PRIMARY KEY auto_increment,
	name VARCHAR ( 20 ),
	age INT,
	dep_id INT,-- 所属部门编号
-- 添加外键约束,关联部门编号
CONSTRAINT fk_emp_dept FOREIGN KEY ( dep_id ) REFERENCES dept ( id ) 
);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ffrr3yZz-1647216345833)(file:///C:\Users\chen\AppData\Local\Temp\ksohtml\wps243F.tmp.jpg)]

举报

相关推荐

0 条评论