MySQL表操作
目录
一、表操作
1.1 表操作-查询
1.1.1 查询当前数据库所有表
1.1.2 查看指定表结构
1.2 表操作-创建
1.2.1 创建表结构
1.3 表操作-修改
1.3.1 添加字段
1.3.2 修改数据类型
1.3.3 修改字段名和字段类型
1.3.4 删除字段
1.3.5 修改表名
1.4 表操作-删除
1.4.1 删除表
1.4.2 删除指定表
1.5 mysql权限问题
1.6 备份
1.7 触发器
一、表操作
1.1 表操作-查询
1.1.1 查询当前数据库所有表
show tables
1.1.2 查看指定表结构
desc 表名;
1.2 表操作-创建
1.2.1 创建表结构
create table 表名(
字段1 字段1类型 [ comment 字段1注释],
字段2 字段2类型 [ comment 字段2注释],
字段3 字段3类型 [ comment 字段3注释],
......
字段n 字段n类型 [comment 字段n注释]
) [ comment 表注释];
/*注意:[...]内为可选参数,最后一个字段后面没有逗号*/
比如 ,我们创建—张表students ,对应的结构如下 ,那么建表语句为:
create table students(
id int comment '学号',
name varchar(50) comment '姓名 ',
age int comment '年龄 ',
gender varchar(1) comment '性别 '
) comment '学生表 ';
案例:
1. 设计⼀张员工信息表 ,要求如下:
编号(纯数字)
员工工号 ( 字符串类型 ,长度不超过 10 位 )
员工姓名(字符串类型 ,长度不超过 10 位)
性别(男/女 ,存储⼀个汉字)
年龄(正常人年龄 ,不可能存储负数)
身份证号( ⼆代身份证号均为 18 位 ,身份证中有 X 这样的字符)
入职时间(取值年月日即可)
create table emp(
id int comment '编号 ',
workno varchar(10) comment '⼯号 ',
name varchar(10) comment '姓名 ',
gender char(1) comment '性别 ',
age tinyint unsigned comment '年龄 ',
idcard char(18) comment '⾝份证号 ',
entrydate date comment '⼊职时间 '
) comment '员⼯表 ';
1.3 表操作-修改
1.3.1 添加字段
ALTER TABLE 表名 ADD 字段名 类型 (⻓度) [ COMMENT 注释 ] [ 约束 ];
为 emp 表增加⼀个新的字段 ” 昵称 ” 为 nickname ,类型为 varchar(20)
ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称 ';
1.3.2 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (⻓度);
1.3.3 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (⻓度) [ COMMENT 注释 ] [ 约束 ];
举例:将emp 表的nickname字段修改为 username ,类型为 varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称 ';
1.3.4 删除字段
ALTER TABLE 表名 DROP 字段名;
举例:将emp表的字段 username 删除
ALTER TABLE EMP DROP username;
1.3.5 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
举例:将emp表的表名修改为employee
ALTER TABLE emp RENAME TO employee;
1.4 表操作-删除
1.4.1 删除表
DROP TABLE [ IF EXISTS ] 表名;
可选项 IF EXISTS 代表 ,只有表名存在时才会删除该表 ,表名不存在 ,则不执行删除操作 ( 如果不加该参数项 ,删除⼀张不存在的表 ,执行将会报错 ) 。
案例 :
如果 user 表存在 ,则删除 user 表
DROP TABLE IF EXISTS user;
1.4.2 删除指定表
删除指定表,并重新创建表
(理解为清空表中的所有数据 ,数据量多时 ,使用的是删除⽅法, 数据量少使用delete)
TRUNCATE TABLE 表名;
注意 : 在删除表的时候 ,表中的全部数据也都会被删除。
1.5 mysql权限问题
mysql权限:
-- mysql数据库权限:
-- root :拥有所有权限(可以干任何事情)
-- 权限账户, 只拥有部分权限(CURD)例如, 只能操作某个数据库的某张表
如何修改mysql 的用户密码?
-- password: md5加密函数(单向加密) :SELECT PASSWORD ( 'root ');
-- mysql数据库,⽤户 配置 : user表
USE mysql;
SELECT * FROM USER;
-- 修改密码 UPDATE USER SET PASSWORD=PASSWORD( '123456 ') WHERE USER= 'root ';
--权限:
GRANT 权限 ON 数据库.表 TO '账户名'@'账户地址' IDENTIFIED BY '密码';
--举例:
select insert delete update drop create/
-- 分配权限账户GRANT SELECT ON project.students TO 'root'@ 'localhost' IDENTIFIED BY '123456 ';
GRANT DELETE ON project.user TO 'root'@'192.168.32.130' IDENTIFIED BY '123456';
1.6 备份
/*备份*/
/*mysqldump -u<⽤户名 -p<密码 备份的数据库名称 磁盘路径/备份后的⽂件命名*/
mysqldump -uroot -p123456 d:/project.sql
/*恢复*/
/*mysqldump -u<⽤户名 -p<密码 需要回复的⽂件名 < ⽂件路径*/
mysqldump -uroot -p123456 < d:/project.sql
/*注意:不需要登录*/
1.7 触发器
触发器作用:
当操作了某张表时 ,希望同时触发⼀些动作/行为 ,可以使用触发器完成
例如: 当向员工表插入一条记录时 ,希望同时往日志表插入数据
--首先创建日志表
-- ⽇志表 CREATE TABLE test_log(
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(100)
)
-- 需求:当向员⼯表插⼊⼀条记录时, 希望mysql⾃动同时往⽇志表插⼊数据
-- 创建触发器(添加)CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW
-- 当往员⼯表插⼊⼀条记录时INSERT INTO test_log(content) VALUES('员⼯表插⼊了⼀条记录');
-- 插⼊数据INSERT INTO employee(id,empName,deptId) VALUES(6, '宋江 ',2);
INSERT INTO employee(id,empName,deptId) VALUES(7,'林冲',4);
-- 查询数据SELECT * FROM employee;
SELECT * FROM test_log;
-- 创建触发器(修改)CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW
-- 当往员⼯表修改⼀条记录时INSERT INTO test_log(content) VALUES( '员⼯表修改 了⼀条记录');
-- 修改UPDATE employee SET empName= 'eric ' WHERE id=7; 16
-- 创建触发器(删除)CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW
-- 当往员⼯表删除⼀条记录时INSERT INTO test_log(content) VALUES( '员⼯表删除了⼀条记录');
-- 删除DELETE FROM employee WHERE id=5;