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数据类型

大致分为数值、时间/日期、字符串(字符)

使用php与mysql交互


一只菜鸡