mysql学习笔记
mysql学习笔记
环境是phpStudy, 默认用户名密码都是root
在本地windows环境下mysql是不区分大小写的
mysql
常用操作
查看数据库
show databases;
show tables;
创建数据库
CREATE DATABASE 数据库名;
删除数据库
这个千万不能忘
drop database 数据库名;
选择数据库
use 数据库名
创建数据表
CREATE TABLE table_name (column_name columns_type);
示例
CREATE TABLE `first`(
`id` INT UNSIGNED AUTO_INCREMENT,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
注意这里的`是ESC键,不是单引号!
最后必须指定字符集CHARSET(其他的可以不要)
删除数据表
drop table 数据表名
插入数据
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
若提示uplicate entry 'xxx' for key 'PRIMARY'
说明重复插入
若未标明区分大小写,则行内元素默认不区分大小写
查询数据
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
你可以使用 WHERE 语句来包含任何条件。
你可以使用 LIMIT 属性来设定返回的记录数。
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
使用WHERE BINARY
可以区分大小写
更新数据
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
例如
UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;
删除数据
DELETE FROM table_name [WHERE Clause]
如果没有填写where则所有记录都会被删除!
like子句
like用在where之后,类似于正则表达式
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
like 匹配/模糊匹配,会与 % 和 _ 结合使用。
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
union子句
union子句来连接多次查询
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
ALL表示返回所有重复值,DISTINCT表示去重
这里的expression
不能是*,而且上下要一致
order by排序
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
如果字符集采用的是 utf8(万国码),需要先对字段进行转码然后排序:
SELECT * FROM runoob_tbl
ORDER BY CONVERT(runoob_title using gbk);
ASC
是升序排序,DESC
是降序排序。默认为升序排序
GROUP BY 分组
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上可以使用 COUNT, SUM, AVG,等函数。
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
注意function里面不能写*(废话
连接join
join可以实现在多个表中查询
join分为inner join/left join/right join
INNER JONI:取两个集合的并集
LEFT JOIN: 读取左侧集合的所有数据,如果右侧对应的数据为空则返回NULL
RIGHT JOIN: 与上相反
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1 | 菜鸟教程 | 10 |
| 2 | 菜鸟教程 | 10 |
| 3 | RUNOOB.COM | 20 |
| 4 | RUNOOB.COM | 20 |
+-------------+-----------------+----------------+
4 rows in set (0.01 sec)
NULL值
在mysql中,任何参数与NULL直接比较(!=, =)返回的结果都是false。但是我们可以通过IS NULL / IS NOT NULL
正则表达式
信息量有点大,咕咕咕
事务
好像用不到qwq
ALTER
修改数据表名或者修改数据表字段名
添加/删除列
删除列:`alter table tcount_tbl DROP nw;`
增加列:`alter table tcount_tbl ADD nw INT;`
默认增加的列会放置在最后,可以使用FIRST
放到最前或者AFTER 列名
放到某个字段后面
修改列名
使用MODIFY:ALTER TABLE tcount_tbl MODIFY nw INT;//把nw改为INT类型
使用CHANGE:ALTER TABLE tcount_tbl CHANGE nw kkk INT; //把nw的列名改为kkk,类型为INT
在修改的时候如果不添加NOT NULL则默认为NULL
修改表名
ALTER table tcount_tbl RENAME TO mytable;//把tcount_tbl修改为mytable
复制表
SHOW CREATE table mytable;可以显示出mytable的结构
导入数据
mysql> create database abc; # 创建数据库
mysql> use abc; # 使用已创建的数据库
mysql> set names utf8; # 设置编码 如果出现乱码可以尝试set names gbk;
mysql> source /home/abc/abc.sql # 导入备份数据库
mysql数据类型
大致分为数值、时间/日期、字符串(字符)