MySQL语法记录 参考 韩顺平讲MySQL
命令行
启动mysql服务:net mysql start
关闭mysql服务:net mysql stop
客户端连接到Mysql服务(MySQL数据库):mysql -h 主机名 -P 端口 -u 用户名 -p密码
-h 默认本机localhost 126.0.0.1 ,-p默认3306
MySQL数据库是由:数据库管理系统(DBMS),这个管理程序可以管理多个数据库;数据库(存在data文件夹下);数据库中的表(在数据库文件夹下,本质上仍然是文件)组成的。mysqld是DBMS中最重要的一个程序,监听3306端口。客户端(终端、Java等)通过tcp网络发送sql指令给DBMS监听的3306端口,DBMS返回在对应数据库中处理的结果。
MySQL默认的字符集为utf8、数据库字符集的校对规则为utf8_general_ci。
校对规则utf8_bin区分大小写,utf8_general_ci不区分。表的字符集和校对规则默认使用数据库的。反引号用于在创建数据库、表的时候,规避关键字,如`CREATE`,这样做更规范。
数据库相关语句
# 创建数据库 校对规则utf8_bin区分大小写,utf8_general_ci不区分
CREATE DATABASE IF NOT EXISTS `db01` CHARACTER SET utf8 COLLATE utf8_bin
# 显示所有数据库
SHOW DATABASES
# 显示创建的数据库的定义信息
SHOW CREATE DATABASE `db01`
# 删除数据库
DROP DATABASE IF EXISTS `db01`
# 备份数据库(DOS下执行) mysqldump指令在\bin下
# mysqldump -u root -p -B database1 database2 databasen > 带路径的文件名.sql
# mysqldump -u root -p -B db01 yh_test > D:\\code\\Database\\database_dump.sql
# 只备份数据库中的部分表:mysqldump -u root -p database table1 table2 tablen > 文件名.sql
# 恢复数据库(MySQL命令行中执行) 如果是恢复表,需要先 use database;
# Source 文件名.sql
# Source D:\\code\\Database\\database_dump.sql
创建及修改表
DROP TABLE IF EXISTS `employe`;
DROP TABLE IF EXISTS `employee`;
CREATE TABLE IF NOT EXISTS `employee`(
id INT,
`name` VARCHAR(32),
sex CHAR(1),
birthday DATE,
entry_date DATETIME,
job VARCHAR(32),
salary DOUBLE,
resume TEXT,
login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)
CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;
# 表增加一个列在resume后面
ALTER TABLE employee
ADD image varchar(32) NOT NULL DEFAULT '' AFTER resume;
# 修改job列,长度改为60
ALTER TABLE employee
MODIFY job VARCHAR(60) NOT NULL DEFAULT '';
# 修改列名
ALTER TABLE employee
CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT '';
# 删除列
ALTER TABLE employee
DROP image;
# 修改字符集、校验规则
ALTER TABLE employee CHARACTER SET utf8 COLLATE utf8_bin;
# 修改表名
RENAME TABLE employee TO employe;
# 显示表结构
DESC employe;
MySQL数据类型
增删改查 CRUD
注意插入时(id,goods_name,price)中间不能有空格
DROP TABLE IF EXISTS goods;
CREATE TABLE `goods`(
id INT,
goods_name VARCHAR(10),
price DOUBLE NOT NULL DEFAULT 2999.9);
# 添加数据 字符和日期型数据应包含在单引号中;数值型不必,但放入单引号也可自动解析成数值;缺省某个字段,默认值为NULL或者自己设置的
INSERT INTO `goods` (id,goods_name,price) VALUES(1,'HUAWEI手机','5500.9');
INSERT INTO `goods` VALUES(2,'Apple手机', 5999.9);
INSERT INTO `goods` (id,goods_name,price) VALUES(3,NULL, 3499), (4,'oppo手机',4599);
INSERT INTO `goods` (id,goods_name) VALUES(5,'vivo手机');
# 修改数据
UPDATE goods
SET goods_name = 'Apple14', price = price + 1000
WHERE id = 2;
# 删除数据
DELETE FROM goods
WHERE price > 5000;
SELECT * FROM goods;
模糊查询 参考
关键字 LIKE, NOT LIKE
%通配符 表示任意0个或者多个字符
_通配符 表示任意一个字符
ESCAPE 后面跟着一个字符,里面写着什么,MySQL就把那个符号当做转义符,如通过’/‘来转义’_‘,使匹配结果含有’_’
select * from app_info where appName LIKE '%/_%' ESCAPE '/';
内置函数 LOCATE(substr, str, [pos]),返回从位置pos开始(默认为1),substr在str中第一次出现的位置,若不存在返回0。substr或str为NULL,返回NULL。
SELECT locate('a', 'banana', 3); -- 4
SELECT locate('z', 'banana'); -- 0
SELECT locate('a' , NULL ); -- NULL
用LOCATE关键字进行模糊匹配,等同于 like '%网%,做判断时可省略默认的 >0
SELECT * from app_info where LOCATE('网', `appName`) > 0;
内置函数 POSITION(substr IN str) 功能同 LOCATE,返回substr在str中第一次出现的位置,它没有pos参数
用POSITION关键字进行模糊匹配,等同于 like ‘%网%’
SELECT * from app_info where POSITION('网' IN `appName`);
内置函数 INSTR(str, substr),功能同 LOCATE,只是交换了两个参数位置,它没有pos参数
SELECT * from app_info where INSTR(`appName`, '网') > 0;
基于regexp、rlike的正则匹配查询(待补充)
WHERE子句中常用的运算符
查询例子
创建表
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL DEFAULT 1,
NAME VARCHAR (20) NOT NULL DEFAULT '',
chinese FLOAT NOT NULL DEFAULT 0.0,
english FLOAT NOT NULL DEFAULT 0.0,
math FLOAT NOT NULL DEFAULT 0.0
);
INSERT INTO student (id,name,chinese,english,math) VALUES (1,"韩顺平",89,78,90);
INSERT INTO student (id,name,chinese,english,math) VALUES (2,"张飞",67,98,56);
INSERT INTO student (id,name,