常用命令
//添加数据
INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')
//修改数据
UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];
//删除数据
一、初识MySQL
1.7 连接数据库
//连接数据库f
//方式一
mysql -uroot -p
//方式二
mysql -uroot -p123456
//结尾必须带分号
update user set password=password('123456')where user='root'; 修改密码
flush privileges; 刷新数据库
show databases; 显示所有数据库
use dbname; 打开某个数据库,use+数据库名
show tables; 显示数据库mysql中所有的表
describe user; 显示表mysql数据库中user表的列信息
create database name; 创建数据库
use databasename; 选择数据库
exit; 退出Mysql
? 命令关键词 : 寻求帮助
-- 表示注释
2、操作数据库
2.1、结构化查询语句分类
2.2、数据库操作 (了解)
说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键).
- 1、命令行操作数据库
- 创建数据库 : create database [if not exists] 数据库名;
- 删除数据库 : drop database [if exists] 数据库名;
- 查看数据库 : show databases;
- 使用数据库 : use 数据库名;
2.3 数据库的列类型
列类型 : 规定数据库中该列存放的数据类型
-
数值类型
decimal:金融计算的时候,一般使用
-
字符串
常用varchar
-
日期和时间型数值类型
-
null
2.4、数据字段属性 (重点)
2.5、创建数据库表(重点)
create table [if not exists] `表名`(
'字段名1' 列类型 [属性][索引][注释],
'字段名2' 列类型 [属性][索引][注释],
#...
'字段名n' 列类型 [属性][索引][注释]
)[表类型][表字符集][注释];
说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键).
-- 目标 : 创建一个school数据库
-- 创建学生表(列,字段)
-- 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email
-- 创建表之前 , 一定要先选择数据库
CREATE TABLE IF NOT EXISTS `student` (
`id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` datetime DEFAULT NULL COMMENT '生日',
`address` varchar(100) DEFAULT NULL COMMENT '地址',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- 查看数据库的定义
SHOW CREATE DATABASE school;
-- 查看数据表的定义
SHOW CREATE TABLE student;
-- 显示表结构
DESC student; -- 设置严格检查模式(不能容错了)SET
sql_mode='STRICT_TRANS_TABLES';
关于数据库引擎
INNODB 默认使用
MYISAM 早些年使用
2.6、修改数据库
2.6.1 修改表
修改表名 : ALTER TABLE 旧表名 RENAME AS 新表名
添加字段 : ALTER TABLE 表名 ADD字段名 列属性[属性]
修改字段 :
ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
删除字段 : ALTER TABLE 表名 DROP 字段名
2.6.2 删除数据表
DROP TABLE [IF EXISTS] 表名
- IF EXISTS 为可选 , 判断是否存在该数据表
- 如删除不存在的数据表会抛出错误
2.6.3 其他数据表操作
1. 可用反引号(`)为标识符(库名、表名、字段名、索引、别名)包裹,以避免与关键字重名!中文也可以作为标识符!
2. 每个库目录存在一个保存当前数据库的选项文件db.opt。
3. 注释:
单行注释 # 注释内容
多行注释 /* 注释内容 */
单行注释 -- 注释内容 (标准SQL注释风格,要求双破折号后加一空格符(空格、TAB、
换行等))
4. 模式通配符:
_ 任意单个字符
% 任意多个字符,甚至包括零字符
单引号需要进行转义 \'
5. CMD命令行内的语句结束符可以为 ";", "\G", "\g",仅影响显示结果。其他地方还是用分号结
束。delimiter 可修改当前对话的语句结束符。
6. SQL对大小写不敏感 (关键字)
7. 清除已有语句:\c
3、MySQL数据管理 (最重点)
3.1、外键(了解)
- 添加外键
方式一
方式二
- 删除外键
3.2、DML语言(全部记住,增删改查)
数据库意义 : 数据存储、数据管理
管理数据库数据方法:
- 通过SQLyog等管理工具管理数据库数据
- 通过DML语句管理数据库数据
DML语言 : 数据操作语言
- 用于操作数据库对象中所包含的数据
- 包括 :
- INSERT (添加数据语句)
- UPDATE (更新数据语句)
- DELETE (删除数据语句)
3.3、添加( INSERT)
INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')
注意 :
- 由于主键自增,我们可以忽略(如果不写表的字段它会一一匹配)
- 字段或值之间用英文逗号隔开 .
- ’ 字段1,字段2…’ 该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致 .
- 可同时插入多条数据 , values 后用英文逗号隔开 .
//在后台引入数据库
<insert id="addUser">
INSERT INTO easyuser
(username,password,email,role,state)
VALUE
(#{username},#{password},#{email},#{role},#{state})
</insert>
3.4 修改数据(update命令)
UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];
注意 :
- column_name 为要更改的数据列
- value 为修改后的数据 , 可以为变量 , 具体指 , 表达式或者嵌套的SELECT结果
- condition 为筛选条件 , 如不指定则修改该表的所有列数据
<select id="getUpdateUser" resultType="com.urlhouduan.houduan.bean.User">
SELECT * FROM easyuser WHERE id = #{id}
</select>
<update id="editUser">
UPDATE easyuser SET username = #{username} , password = #{password} ,
email = #{email} WHERE id = #{id}
</update>
3.5 删除数据(DELETE命令 和 TRUNCATE)
<delete id="deleteblack">
DELETE FROM blacklist WHERE id = #{id}
</delete>
注意:区别于DELETE命令
- 相同 : 都能删除数据 , 不删除表结构 , 但TRUNCATE速度更快
- 不同 :
使用TRUNCATE TABLE 重新设置 自增列 计数器归零
使用TRUNCATE TABLE不会对事务有影响 (事务后面会说)
4、使用DQL查询数据 (最最最重要)
4.1、DQL语言
DQL( Data Query Language 数据查询语言 )
-
查询数据库数据 , 如SELECT语句
-
简单的单表查询或多表的复杂查询和嵌套查询
-
是数据库语言中最核心,最重要的语句
-
使用频率最高的语句
-
SELECT语法
4.2、指定查询字段
-- 查询所有学生信息
SELECT * FROM student;
-- 查询指定列(学号 , 姓名)
SELECT studentno,studentname FROM student;
AS 子句作为别名
作用:
可给数据列取一个新别名
可给表取一个新别名
可把经计算或总结的结果用另一个新名称来代替
-- 这里是为列取别名(当然as关键词可以省略)
SELECT studentno AS 学号,studentname AS 姓名 FROM student;
-- 使用as也可以为表取别名
SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;
-- 使用as,为查询结果取一个新名字
-- CONCAT()函数拼接字符串
SELECT CONCAT('姓名:',studentname) AS 新姓名 FROM student;
DISTINCT关键字的使用
作用 : 去掉SELECT查询返回的记录结果中重复的记录 ( 返回所有列的值都相同 ) , 只返回一条
-- # 查看哪些同学参加了考试(学号) 去除重复项
SELECT * FROM result; -- 查看考试成绩
SELECT studentno FROM result; -- 查看哪些同学参加了考试
SELECT DISTINCT studentno FROM result; -- 了解:DISTINCT 去除重复项 , (默认是ALL)
使用表达式的列
数据库中的表达式 : 一般由文本值 , 列值 , NULL , 函数和操作符等组成
应用场景 :
- SELECT语句返回结果列中使用
- SELECT语句中的ORDER BY , HAVING等子句中使用
- DML语句中的 where 条件语句中使用表达式
-- selcet查询中可以使用表达式
SELECT @@auto_increment_increment; -- 查询自增步长
SELECT VERSION(); -- 查询版本号
SELECT 100*3-1 AS 计算结果; -- 表达式
-- 学员考试成绩集体提分一分查看
SELECT studentno,StudentResult+1 AS '提分后' FROM result;
- 避免SQL返回结果中包含 ’ . ’ , ’ * ’ 和括号等干扰开发语言程序.
4.3、where条件语句
作用:用于检索数据表中 符合条件 的记录
搜索条件可由一个或多个逻辑表达式组成 , 结果一般为真或假.
逻辑操作符
-- 满足条件的查询(where)
SELECT Studentno,StudentResult FROM result;
-- 查询考试成绩在95-100之间的
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 AND StudentResult<=100;
-- AND也可以写成 &&
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 && StudentResult<=100;
-- 模糊查询(对应的词:精确查询)
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult BETWEEN 95 AND 100;
-- 除了1000号同学,要其他同学的成绩
SELECT studentno,studentresult
FROM result
WHERE studentno!=1000;
-- 使用NOT
SELECT studentno,studentresult
FROM result
WHERE NOT studentno=1000;