mysql基础
SQL:结构化查询语言 (Structured Query Language)
默认端口:3306
连接字符串:server=127.0.0.1;uid=root;pwd=root;database=test
安装:yum安装rpm包,建议5.5以上版本。
SQL语句分类:
DDL:数据定义语言。负责数据库定义、数据库对象定义,有CREATE、ALTER、DROP组成。
DML:数据操作语言。负责数据库对象的操作,CRUD增删改查。
DCL:数据控制语言。负责数据库访问控制,由GRANT和REVOKE组成。
TCL:事物控制语言。负责处理ACID事务,支持commit、rollback。
Note:
• 大小写不敏感
• 语句末尾应使用分号
授权:
GRANT ALL ON DatabaseName.TableName TO 'UserName'@'host' IDENTIFIED by 'Password';
注:授权所有权限给 库.表 给 用户@主机 密码是
例:GRANT ALL ON employee.* TO 'test'@'%' IDENTIFIED by 'test';
撤销:
REVOKE ALL ON DatabaseName.TableName FROM UserName;
注:撤销用户的 库.表 的所有权限
例:REVOKE ALL ON employee.* FROM test;
删除用户:
DROP USER user1;
创建数据库:
CREATE DATABASE IF NOT EXISTS students CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
注:
• CHARACTER SET utf8mb4 字符集在MySQL5.53+以上版本
• COLLATE 字符集比较大小
删除数据库:
DROP DATABASE IF EXISTS students;
创建表:
CREATE TABLE 'employees' (
'emp_no' int(11) NOT NULL,
'birthday' date NOT NULL,
'first_name' varchar(14) NOT NULL,
'last_name' varchar(16) NOT NULL,
'gender' enum('M', 'F') NOT NULL,
'hire_date' date NOT NULL,
PRIMARY KEY('emp_no')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注:
• InnoDB支持事务的引擎
• 实际开发中使用工具(Navicat)来建表,能看懂就行
查看表
DESC employees; # 查看所有列
DESC employees %name; # 查看name结尾的列
PRIMARY KEY 主键:一列或多列组成的唯一的key。
注:
• 一般选择整形或长整形的某一列作为主键
• 少用其他类型或组合列作为主键
• 主键要设置为AUTO_INCREMENT自增
• 每个表一般都有一个主键
Index 索引:根据一个字段或多个字段建立的字典。(查询提速)
注:
• 能显著提高查询效率
• 降低其他操作效率
• 主键索引:主键会自动建立索引
• 唯一索引:可以为空,只要不为空则必须唯一
• 普通索引:没有唯一性要求
• 如果表读多,写少,可以任意建立索引
• 如果表写多,读少,不要大量建立索引
Constraint 约束:
• 唯一约束:UNIQUE
• 主键约束:PRIMARY KEY。主键自动添加
• 外键约束:FOREIGN KEY。
• 外键:表B中的列,关联表A中的主键,则表B中的列就是外键
• 表关联关系中,对表的删除和更新时需要关注
• 保证数据的一致性和完整性,杜绝数据的冗余
View 视图:
• 是一张虚拟表,是真实表的联合查询结果
• 可以进行CRUD操作,但建议只做查询使用
• 很复杂的查询语句,可以写成视图
• 视图是数据安全的,可以控制字段的显示
数据类型:
• 整型:tinyint > smallint > int > bigint
• 浮点数:一般需要确定精度(小数点后几位)
• 日期
• 字符
char:字符串长度等长,但会浪费空间。
varchar:字符串长度可以变长,省空间。(不经常修改的字段可以使用)
但数据量大,要修改其中一个字符串长度,那么所有存储空间都必须动
注:如何选择应该根据实际情况
最佳实践:
• 给表加一个id字段(int),作为单一主键,(自增、无符号)
• 字符串做主键,效率肯定没有整数高。
• 表里面有记录的情况下,不能随便乱加字段,尤其是表在线上正在使用时
• 所以,设计表时多添加两个字段reserved1、reserved2,作为冗余,空间换实践,避免上述情况发生
• 表设计时,是否需要冗余字段,需要看将来对表的改动有多大