1、连接数据库
musql -uroot -p123456 --连接数据库
------------------------------------------------------------------------------
update mysql.user set authentication_string = password('123456') where user =
'root' and Host = 'localhost'; --修改用户密码
flush privileges; --刷新权限
show databases; --查看所有数据库
use school --切换数据库
show tables; --查看所有的表
describe student; --查看表的内容
create database westos; --创建数据库
exit; --退出连接
-- 单行注释(SQL本来的注释)
/*(SQL的多行注释)*/
数据库xxx语言
DDL 定义
DML 操作
DQL 查询
DCL 控制
2、操作数据库
操作数据库>操作数据库中的表>操作数据表中的数据
mysql关键字不区分大小写
2.1、操作数据库(了解)
1、创建数据库
create database [if not exists] westos
2、删除数据库
drop database [if exists] westos
3、使用数据库
use westos
4、查看所有的数据库
show databases
Tip:当使用字段与系统字段冲突时,用``标明
2.2、数据库的列类型
数值
-
tinyint 十分小的数据 1个字节
-
smallint 较小的数据 2个字节
-
mediumint 中等大小的数据 3个字节
-
**int 标准整数 4个字节 **
-
bigint 较大的数据 8个字节
-
float 浮点数 4个字节
-
double 浮点数 8个字节
-
decimal 字符串形式的浮点数 一般用于金融计算
字符串
- char 字符串大小固定的0~255
- varchar 可变字符串 0~65535 String
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1 保存大文本
时间日期
java.util.Date
- date YYY-MM-DD, 日期格式
- time HH:mm:ss 时间格式
- datetime YYY-MM-DD HH:mm:ss 最常用的时间格式
- timestamp 时间戳 1970.1.1到现在的毫秒数!较为常用!
- year 年份表示
null
- 没有值
- 注意不要使用null进行运算,结果为null
2.3、数据库的字段属性(重点)
Unsigned:
- 无符号的整数
- 声明了该列不能声明为负数
Zerofill
- 0填充的
- 不足的位数用0来填充
自增
- 通常理解为自增,默认在上一条记录上+1
- 通常用来设计唯一的主键~index,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空
- 假设为not null ,如果不给他赋值,就会报错
- null,如果不填写值,默认就是null
2.4、创建数据库表
MySQL.md
-- 目标:创建一个school数据库
-- 创建学生表(列,字段),使用SQL创建
-- 学号int 登录密码varchar(20),姓名,性别varchar(2),出生日期(datetime),家庭住址,email
-- 注意点:使用英文括号,表的名称和字段尽量使用``括起来
-- AUTO_INCREMENT 自增
-- 字符串使用''单引号阔起来
-- 所有语句后面加英文的,最后一个不用加
-- PRIMARY KEY主键,一般一个表只有一个主键
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '学生学号',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '登录密码',
`name` VARCHAR(10) NOT NULL DEFAULT '匿名' 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
格式
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
.........
PRIMARY KEY(`字段名`)
)[表类型][字符集设置][注释]
常用命令
SHOW CREATE DATABASE `school` -- 创建数据库语句
SHOW CREATE TABLE `student` -- 查看创建表语句
DESC `student` -- 显示表的结构
2.5、数据表的类型
-- 关于数据库引擎
/*
INNODB 默认使用
MYISAM 早些年使用的
*/
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
常规使用操作:
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事务的处理,多表多用户操作
在物理空间存在的位置
所有数据库存放在data文件夹下
本质还是文件存储!
MySQL引擎在物理文件上的区别
-
InnoDB 在数据库表中只有一个*.frm文件,和上级目录的ibdata1文件
-
MYISAM *.frm 表结构定义文件
*.MYD 数据文件 (data)
*.MYI 索引文件 (Index)
设置数据库表的字符集编码
CHARSET=utf8
不设置的话,会是mysql默认的字符集编码~(不支持中文)
MySQL的默认编码是Lanin1,不支持中文
可以在my.ini中配置默认的编码
character-set-server=utf8
2.6、修改删除表
修改(修改字段名语句,修改字段名的同时可以修改约束)
-- 修改表名 : ALTER TABLE 旧表名 RENAME AS 新表明
ALTER TABLE teacher RENAME AS teacher01
-- 增加表的字段: ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teacher1 ADD age INT(11)
-- 修改表的字段 (重命名,修改约束!)
-- ALTER TABLE 表名 MODIFY 字段名 列属性[]
ALTER TABLE teacher01 MODIFY id VARCHAR(20) --修改约束
-- ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE teacher01 CHANGE name name01 VARCHAR(10) -- 修改字段名
-- 删除表的字段:ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher01 DROP name01
删除
-- 删除表(如果表存在再删除)
DROP TABLE IF EXISTS teacher01
所有的创建和删除操作尽量加上判断,以免报错~
3、MySQL数据管理
3.1、外键(了解即可)
删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)
以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成困扰,这里了解即可)
最佳实践
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键(程序去实现)
3.2、DML语言(全部记住)
3.3、 添加
语法:insert into 表名 ([字段名1,字段名2]) values (‘值1’),(‘值2’)
注意事项:
- 字段和字段之间用英文逗号隔开
- 字段可以是省略的,但是后面的值必须一一对应,不能少
- 可以同时插入多条数据,VALUES后面的值,需要使用,隔开即可
3.4、修改
update 修改谁(条件) set原来的值 = 新值
-- 修改学员名字,带了简介
UPDATE `student` SET `name`='Bastien' WHERE `id`=1
-- 不指定条件,会改动所有表!
UPDATE `student` SET `name`='张三'
-- 修改多个属性,逗号隔开
UPDATE `student` SET `name`='Bastien',`sex`='男' WHERE `id`=2
-- 语法:
-- update 表名 set colnum_name = 'value',colnum01_name = 'value' where [条件]
条件:where 子句 运算符 id等于某个值,大于某个值
操作符 | 等于 | 范围 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
<>或!= | 不等于 | 5<>6 | true |
> | |||
< | |||
<= | |||
>= | |||
BETWEEN … AND … | 某个范围内 | [2,5] | [2,5] |
AND | && 条件 | ||
OR | || 条件 |
-- 通过多个条件定位数据
update `student` set `name` = 'Bastien' where `id`=1 and `sex`='女'
语法:update 表名 set colnum_name = ‘value’,colnum01_name = ‘value’ where [条件]
注意:
- colnum_name 是数据库的列,要带上``
- 条件,筛选的条件,如果没有指定,则会修改所有的列
- value,是一个具体的值,也可以是一个变量
UPDATE `student` SET `birthday` = CURRENT_TIME WHERE `name`='Bastien' AND
`sex`='女'
3.5、删除
delete 命令
语法:delete from 表名 [where 条件]
-- 删除数据 (避免这样写,会全部删除)
DELETE FROM `student`
-- 添加条件
DELETE FROM `student` WHERE `id`=1
TRUNCATE 命令
作用:完全清空一个数据库表,表的结构和索引都不会变
-- 清空student表
TRUNCATE `student`
delete 和 truncate 的区别
- 相同点:都能删除数据,都不会删除表结构
- 不同:
- truncate 重新设置自增列,计数器回归零
- truncate 不会影响事务
-- 测试delete 和 truncate 的区别
CREATE TABLE IF NOT EXISTS `test`(
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '自增增量',
`name` VARCHAR(20) NOT NULL COMMENT '测试名字',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `test`(`name`) VALUES ('张三'),('李四'),('王五');
TRUNCATE `test`; -- 不会影响自增
INSERT INTO `test`(`name`) VALUES ('张三'),('李四'),('王五');
DELETE FROM `test`; --自增会归零
INSERT INTO `test`(`name`) VALUES ('张三'),('李四'),('王五');
了解即可:DELETE删除的问题
,重启数据库,现象
- InnoDB 自增列会从1开始 (存在内存当中的,断电即失)
- MySAM 继续从上一个自增量开始(存在文件中的,不会丢失)