🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**一.数据库的连接** ~~~ mysql -u -p -h -u 用户名 -p 密码 -h host主机 ~~~ * * * * * **二.修改MySQL提示符** 1.连接客户端时,通过参数指定 ~~~ mysql -h localhost -u root --prompt 提示符 ~~~ 2.连接上客户端后,通过`prompt`命令修改 ~~~ prompt 提示符 ~~~ ######**MySQL提示符** | 参数 | 描述 | | --- | --- | | \D | 完整的日期 | | \d | 当前数据库 | | \h | 服务器名称 | | \u | 当前用户 | * * * * * **三.库级知识** 1 显示数据库: `show databases`; 2 选择数据库: `use dbname`; 3 创建数据库: `create database dbname charset utf8`; 4 删除数据库: `drop database dbname`; * * * * * **四. 表级操作** 1 显示库下面的表: `show tables`; 2 查看表的结构: `desc tableName`; 3 查看表的创建过程: `show create table tableName`; 4 创建表: ~~~  create table tbName ( 列名称1 列类型 [列参数] [not null default ], ....列2... .... 列名称N 列类型 [列参数] [not null default ] )engine myisam/innodb charset utf8/gbk ~~~ 例子: ~~~ create table user ( id int auto_increment, name varchar(20) not null default '', age tinyint unsigned not null default 0, index id (id) )engine=innodb charset=utf8; ~~~ >[info] 注:innodb是表引擎,也可以是myisam或其他,但最常用的是myisam和innodb,charset 常用的有utf8,gbk; 5 修改表 (1)修改表之增加列: ~~~ alter table tbName add 列名称1 列类型 [列参数] [not null default ]  ~~~ >[info] 注:add之后的旧列名之后的语法和创建表时的列声明一样 (2)修改表之修改列 ~~~ alter table tbName change 旧列名 新列名 列类型 [列参数] [not null default ] ~~~ >[info] 注:旧列名之后的语法和创建表时的列声明一样 (3)修改表之减少列: alter table tbName drop 列名称; (4)修改表之增加主键 ~~~ alter table tbName add primary key(主键所在列名); ~~~ 例: ~~~ alter table goods add primary key(id) ~~~ 该例是把主键建立在id列上 (5)修改表之删除主键 ~~~ alter table tbName drop primary key; ~~~ (6)修改表之增加索引 ~~~ alter table tbName add [unique|fulltext] index 索引名(列名); ~~~ (7)修改表之删除索引 ~~~ alter table tbName drop index 索引名; ~~~ (8)清空表的数据 ~~~ truncate tableName; ~~~ * * * * * **五.列类型讲解** 整型: ~~~ tinyint (0~255/-128~127) smallint (0~65535/-32768~32767) mediumint int bigint 参数解释: unsigned 无符号(不能为负) zerofill 0填充 M 填充后的宽度 举例:tinyint unsigned;tinyint(6) zerofill; ~~~ 数值型 ~~~ 浮点型:float double 格式:float(M,D) unsigned\zerofill; ~~~ 字符型 ~~~ char(m) 定长 varchar(m)变长 text ~~~ 日期时间类型 ~~~ year YYYY 范围:1901~2155. 可输入值2位和4位(如98,2012) date YYYY-MM-DD 如:2010-03-14 time HH:MM:SS 如:19:26:32 datetime YYYY-MM-DD HH:MM:SS 如:2010-03-14 19:26:32 timestamp YYYY-MM-DD HH:MM:SS 特性:不用赋值,该列会为自己赋当前的具体时间 ~~~ * * * * * **六.增删改查** 1.插入数据 ~~~ insert into 表名(col1,col2,……) values(val1,val2……); -- 插入指定列 insert into 表名 values (,,,,); -- 插入所有列 insert into 表名 values -- 一次插入多行 (val1,val2……), (val1,val2……), (val1,val2……); ~~~ 2.修改数据 ~~~ update tablename set col1=newval1, col2=newval2, ... ... colN=newvalN where 条件; ~~~ 3.删除数据 ~~~ delete from tablenaeme where 条件; ~~~ 4.select 查询 (1) 条件查询 where ~~~ 1 比较运算符 = ,!=,< > <= >= 2 like , not like ('%'匹配任意多个字符,'_'匹配任意单个字符) 3 in , not in , between and 4 is null , is not null ~~~ (2) 分组 `group by `一般要配合5个聚合函数使用:`max,min,sum,avg,count` (3) 筛选 `having` (4) 排序 `order by` (5) 限制 `limit` * * * * * **七.连接查询** 1.左连接 ~~~ .. left join .. on table A left join table B on tableA.col1 = tableB.col2 ; ~~~ 例句: ~~~ select 列名 from table A left join table B on tableA.col1 = tableB.col2 ~~~ 2.右链接: `right join` 3.内连接: `inner join` >[info] 左右连接都是以在左边的表的数据为准,沿着左表查右表. > 内连接是以两张表都有的共同部分数据为准,也就是左右连接的数据之交集. * * * * * **八.子查询** where 型子查询:内层sql的返回值在where后作为条件表达式的一部分 例句: ~~~ select * from tableA where colA = (select colB from tableB where ...); ~~~ from 型子查询:内层sql查询结果,作为一张表,供外层的sql语句再次查询 例句: ~~~ select * from (select * from ...) as tableName where .... ~~~ * * * * * **存储引擎** ~~~ engine=Myisam\Innodb ~~~ 1 Myisam 速度快 不支持事务 回滚 2 Innodb 速度慢 支持事务,回滚 ①开启事务 `start transaction`; ②运行sql; ③提交,同时生效\回滚 `commit\rollback`; * * * * * **触发器 trigger** 监视地点:表 监视行为:增 删 改 触发时间:after\before 触发事件:增 删 改 创建触发器语法 ~~~ create trigger tgName after/before insert/delete/update on tableName for each row sql; -- 触发语句 ~~~ 删除触发器:`drop trigger tgName`; **索引** >[info] 提高查询速度,但是降低了增删改的速度,所以使用索引时,要综合考虑. > 索引不是越多越好,一般我们在常出现于条件表达式中的列加索引. > 值越分散的列,索引的效果越好 索引类型 `primary key`主键索引 ` index` 普通索引 `unique index` 唯一性索引 `fulltext index` 全文索引 * * * * * **mysql的常用命令** 显示当前服务器版本 `select version()`; 显示当前日期时间 `select now()`; 显示当前用户 `select user`; **语法规则** >[info] 关键字和函数名称全部大写 > 数据库形成、表名称、字段名称全部小写 > SQL语句必须以分号结尾;