MySQL数据库操作全指南(一)
一、创建数据库
CREATE DATABASE MySQL_name;
1、显示数据库
show DATABASES;
2、登录数据库
mysql -u root
3、退出数据
quit
表名,字段,主键
常用数据类型:varchar,int,double,datetime,bigint
二、创建表格(create)
create table 'user'( )
1、创建字段
`id` INT(10)NOT NULL, `mobile` VARCHAR(11) NOT NULL, `nickname` VARCHAR(40) NOT NULL, `gmt_created` datetime , `gmt_modified` datetime NOT NULL, primary key('id')
自增
`id` INT UNSIGNED AUTO_INCREMENT
2、主键外键(primary/foregin key)
users
表是主表(父表),user_id
是主键。orders
表是子表,user_id
是外键,引用users
表。
-- 假设你已经创建了 users 表 CREATE TABLE orders ( order_id INT PRIMARY KEY, order_date DATE, user_id INT, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE RESTRICT ON UPDATE RESTRICT on delete cascade on update cascade on delete set null on update cascade );
RESTRICT
的作用是:如果主表中的记录正在被外键引用,那么你将无法删除或更新该记录。ON DELETE CASCADE
更激进,它会直接删除所有相关的子表记录ON DELETE SET NULL
更保守,它保留子表记录,但切断了它们与父表的关联。
3、设置储存引擎和编码方式
ENGINE=InnoDB DEFAULT CHARSET=utf8
三、删除表格(drop)
drop table table_name; drop table if exists table_name;
四、语法
1、插入语句(insert)
insert into table_name(field1,field2……) values (value1,value2……)
(1)插入批量数据
INSERT INTO table_name VALUES (value1,value2,...valueN), (value1,value2,...valueN);
2、查询语句(select)
select field1,field2 …… from table_name;
select * from table_name;//查询所有字段
( 2) Where
SELECT * FROM table_name WHERE condition;
( 3) limit
语法:
SELECT * FROM table_name LIMIT parameter;
查询行数
select * from table_name limit 5,6; //查询5-6行 5; //查询0-5行 4,2 //查询第5,6行
(4)where 与 limit 联用
select * from table_name where age >18 limit 5;
(5)like 查询
语法
select * from table_name where condition like condition;
select * from table_name where name like '_尚香'; select * from table_name where name like '%尚香'; //_尚香和%尚香的区别在于,假如有一个人叫公孙尚香,前者查询不到而后者可以。
( 6) AND&OR
SELECT*FROM timi_adc WHERE ( win_rate > 0.5 OR win_rate < 0.47 ) AND win_rate < 0.51;
( 7) IN/NOT IN
SELECT * FROM table_name WHERE column IN (condtionA,condtionB)
SELECT*FROM timi_adc WHERE fever IN ('T0', 'T3'); where fever not in ('T0'.'T3');
( 8) NULL /NOT NULL
SELECT field_name1,field_name2 FROM table_name WHERE field_name2 IS NOT NULL/IS NULL;
(9)LEFT/RIGHT/INNER JOIN 左右内连接
SELECT*FROM TableA LEFT JOIN TableB ON condition;
a、左连接
假设我们有两个表:
员工表
(Employees):包含员工ID
、姓名
。订单表
(Orders):包含订单ID
、员工ID
、订单金额
。
SELECT E.姓名, O.订单ID, O.订单金额 FROM 员工表 AS E LEFT JOIN 订单表 AS O ON E.员工ID = O.员工ID;
b、右连接
SELECT E.姓名, O.订单ID, O.订单金额 FROM 员工表 AS E RIGHT JOIN 订单表 AS O ON E.员工ID = O.员工ID;
c、内连接(交集)
SELECT*FROM table_a INNER JOIN table_b ON table_a.id = table_b.student_id;
d、全连接(UNION 关键字)
把俩表合并成一个表
SELECT name, department FROM employees_a UNION //去掉重复的,也可以写成union distinct SELECT name, department FROM employees_b;
把重复的也记下来
SELECT name, department FROM employees_a UNION ALL //不去掉重复的,重复的也记下来 SELECT name, department FROM employees_b;
3、排序语句(order by/DESC ASC /limit )
语法
select * from table_name order by field_name;
(1)关键词
select * from table_name order by win_rate DESC ; //降序 win_rate ASC ; //升序 与limit连用 limit 3;
4、更新删除(updata/delete)
updata 语法
updata 表名称 set 列名称 = 新值 where 列名称 =某值
UPDATE timi_adc SET ban_rate = 0.01WHERE hero_name = '艾琳';
delete 语法
delete from table_name [where Clause] //由于删除语句是不可恢复的,所以我们务必要增加WHERE语句 //否则将会删除整张表格的数据
delete from user;//删除user表中的所有数据 delete from user where id=4;//删除user表中id为4的行: delete from `user` where id<20;//删除user表中所有id小于20的数据
alter
添加列 add column
语法:ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束]; -- 向 customers 表添加一个 email 列,数据类型为 VARCHAR(100) ALTER TABLE customers ADD COLUMN email VARCHAR(100);
删除列 drop column
语法:ALTER TABLE 表名 DROP COLUMN 列名; -- 从 employees 表删除 salary 列 ALTER TABLE employees DROP COLUMN salary;
添加约束 add constraint
语法:ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 (列名); -- 为 users 表的 email 列添加一个名为 UQ_email 的唯一约束 ALTER TABLE users ADD CONSTRAINT UQ_email UNIQUE (email);
删除约束 drop constraint
语法:ALTER TABLE 表名 DROP CONSTRAINT 约束名; -- 删除 users 表中的 UQ_email 唯一约束 ALTER TABLE users DROP CONSTRAINT UQ_email;
5、约束管理
create table test02(id int,name varchar(20));//创建表
(1)主键约束
primary key :唯一,不能重复,不能为空
a 添加主键
法一:alter table test02 add primary key (id); 法二:alter table test01 add constraint pk_name primary key(name);
b 修改主键
alter table test02 drop primary key //删除主键 alter table test02 modify id int auto_increment primary key; //修改列添加主键
(2)外键约束
a 禁用/启用
set foreign_key_checks =0;//禁用外键 set foreign_key_checks =1;//启用外键
b 添加约束
法一:创建表的时候就关联 create table test02_fk( t_no int,t_name varchar(20), t_id int, foreign key(t_no) references test02(id) on update cascade on delete set null);
法二:使用alter table xxx add foreign key xxx references xxx alter table test02_fk add foreign key(t_no) references test02(id) on update cascade on delete set null;
法三:使用外键名添加 add constraint alter table test02_fk add constraint fk_test02_no foreign key(t_no) references test02(id) on delete set null on update cascade;
C 删除约束
show create table test02 fk; alter table test02_fk drop foreign key test02_no;
关联主键,可以随主键联动, ON delete RESTRICT//阻止删除父表中的行,直到所有子表中引用该行的记录都被手动删除或修改 ON update RESTRICT//阻止更新父表中的主键值 on delete cascade//当父表中的行被删除时,子表中所有引用该行的行也级联删除 on update cascade//当父表的主键值更新时,子表中对应的外键值也级联更新 on delete set null//当父表中的行被删除时,子表中对应的外键值会被设置为 NULL ============================================================================= RESTRICT 的作用是:如果主表中的记录正在被外键引用,那么你将无法删除或更新该记录。 ON DELETE CASCADE 更激进,它会直接删除所有相关的子表记录 ON DELETE SET NULL 更保守,它保留子表记录,但切断了它们与父表的关联。
check 约束//讲触发器的时候再讲
确保一列或一组列的值是唯一的,不允许重复。与主键不同的是,一个表可以有多个唯一约束,并且唯一约束的列可以包含 NULL 值
(3)唯一约束
我先创建一个表
create table test03(id int,name varchar(20),id_card varchar(18))
a 添加约束
法一:直接添加 alter table test03 add unique(id_card);
法二:通过唯一键添加 alter table test03 add constraint uq_id unique(id_card)
b 删除约束
show create table test03;//查看唯一键约束名 alter table test03 drop index uq_id;//uq_id是唯一键约束名
添加:ALTER TABLE dept ADD CONSTRAINT uq_dept_id UNIQUE (dept_id) ()。 添加复合唯一键:ALTER TABLE test0 ADD CONSTRAINT unq_dept_id_name UNIQUE (id, name) () 删除:ALTER TABLE test01 DROP INDEX unq_id。需要先使用 show create table 表名
(4)默认约束
在插入数据时,如果某个字段没有输入内容,它会自动使用预设的默认值
default 约束
alter table test02 add column create_at timestamp default current_timestamp; timestamp: 指定了 create_at 列的数据类型为 TIMESTAMP 通常用于存储日期和时间,并且可以设置为自动更新 DEFAULT current_timestamp: 这是默认约束。数据库会自动使用当前的系统时间作为它的值。
a 添加约束
alter table test03 add column salary decimal(10,2) default 0.00; alter table test03 add column salary decimal(10,2) alter table test03 alter salary set default 3000.00; alter table test03 modify salary decimal(10,2) default 3000.00;
b 删除约束
alter table test03 alter salary drop default;
查看表中的约束
show create table 表名;