Mysql学习笔记
设置编码:set charset gbk;
进入mysql :Mysql -uroot -proot

修改mysql提示符:Shell>mysql -uroot -proot –prompt 提示符
修改mysql提示符:Mysql>prompt 提示符
提示符:D完整日期;d当前数据库;h 服务器名称u 当前用户

显示当前服务版本:select version();

显示当前时间:select now();

显示当前用户:select user();

创建数据库:create{database|schema} [if not exists] db_name [default] character set [=] charset_name;
Create database t1;

Create database if not exists t1;

Create database if not exists t2 character set utf8

查看警告信息:show warnings;

查看创建数据库所用的指令:show create database t1;

修改数据库:alter {database | schema } [db_name] [default] character set [=] charset_name;

删除数据库:drop {database | schema} [if exists] db_name;





使用数据库: use db_name;
显示当前打开的数据库: select database();
创建数据表:CREATE TABLE [IF NOT EXISTS] table_name(
Column_name data_type,
……….);

查看数据表:SHOW TABLAES [FROM db_name] [LIKE ‘pattern’|WHERE expr]

查看数据表结构:SHOW COLUMNS FROM tbl_name;

插入记录:INSERT [INTO] tb1_name [col_name,….]values(val,….);

记录查找:SELECT expr,…FROM tb_name;






AUTO_INCREMENT必须和PRIMARY KEY一起使用。
PRIMARY KEY 不一定和AUTO-INCREMENT一起使用













创建表,查看储存引擎

因为数据长度不一样,所以报错:

为符号位不同而报错:

正确操作:

显示索引:

参照列自动创建索引:



父表中插入记录:

子表中插入记录:

删除父表中的记录,发现子表也自动删除:


修改数据表
添加单列:ALTER TABLE tb_name ADD [COLUMS] col_name column_definition [FIRST|AFTER col_name]

默认为所有列的最下边:

使用AFTER clo_name:

使用FIRST:

添加多列:
ALTER TABLE tb_name ADD [COLUMN] (col_name colnmn_definition,…….)
删除列:ALTER TABLE tb_name DROP [COLUMN] col_name


添加主键约束:
ALTER TABLE tb_name ADD [CONSTRAINT [sysbol]] PRIMARY KEY [index_type] (index_col_name,…….)
先创建一个users2表:

添加id列:

将id列设为主键:

添加唯一约束:

添加外键约束:

添加或删除默认约束:
ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
添加默认值:

删除默认值:

删除主键约束:
ALTER TABLE tb_name DROP PRIMARY KEY

删除唯一约束:
ALTER TABLE tb_name DROP {INDEX | KEY} index_name
查看索引:

删除唯一约束:

删除外键约束:
ALTER TABLE tb_name DROP FROEIGN KEY fk_symbol
先查看约束名:

删除外键约束: 、

修改列定义:
ALTER TABLE tb_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_nam]
将id移动到最前边:




第一种方法:

第二种:



先创建一个表,普通的插入方法:

可以是表达式,自动添加的也可以设为DEFAULT:

对于有默认值额字段,也可以用DEFAULT使用默认值:

插入多条记录:


缺点,一次只能插入一条记录:



不加where所有记录都会更新:

更新多个字段:

使用where语句:



注意:删除只有再插入值,id是按所有id最大值的下一个


使用别名查询两个字段:






注意:使用第一条时,having后边的字段必须在select中

对查询结果以id的值降序排列:

对查询结果以age升序排列,相同的以id降序排列:


查询两条记录:

查询3,4两条记录:

组合使用,注意并没有id缺少6并不会影响:


先创建一个表,再讲查询的结果插入创建的表中:


当客户端显示乱码时,使用SET NAMES GBK



查询平均值:

查询平均值,并对查询的结果的平均值做四舍五入,取小数点后两位:

使用子表查询:

Any()、some()任何值,all()所有值





DESC tb_name 等价于 SHOW COLUMNS FROM tb_name
使用INSERT …….SELECT 插入记录:






利用新建的表,再更新原表

查询表结构发现,字段的类型并没有变,所以更改字段类型:


多表连接的语法:

表起别名:




多表查询:



三张表的多表查询:



无限分类数据表;


无限分类的查找,用自身连接:

左连接,查询父类下的子类数目:


查询goods_name 重复的记录:

删除重复记录:




应用:

CONCAT_WS()

FORMAT(数,小数点后几位)—对数格式化

LOWER()

UPPER()

LEFT() RIGHT()

简单的嵌套:


LENGTH()空格也算在长度之内

LTRIM(),RTRIM(),TRIM()例子中前边2个空格后边4个空格,总字节数为11个:



TRIM(LEADING ‘要删除的前导字符’,FROM ‘字符串’);
LEADING—前导
TRAILING—后续
BOTH—前+后
'
REPLACE(‘字符串’,’要替换的字符串’,’替换成什么字符串’)

SUBSTRING(‘字符串‘,从第几位开始,截取几位)—起始位置可以为负值

LIKE –MYSQL中的%相当于编程中的*

%代表任意的字符,_代表任意一个字符

CEIL()

FLOOR()

DIV

%

POWER()指数运算:

ROUND()四舍五入

TRUNCATE()小数截取:









多条写入是,只显示第一条记录的id值,并不是多条





如果设计的mysql数据库是为web页面做准备,建议用MD5()加密





创建一个无参的自定义函数,并且自定义函数的使用:

创建一个带参的自定义函数:

DELIMITER //修改分隔符

创建 聚合函数(默认分割符为;如果不更改分隔符会报错):









过程体可以是任意SQL语句(对数据表的增删改查和连接)




删除存储过程:

创建一个带参的存储过程:

创建带有IN和OUT类型参数:

ROW_COUNT()数据表中被操作过的记录(增删改)













