1、连接数据库
命令行连接
mysql -uroot -proot --连接数据库
--另一种情况
mysql -uroot -p
Enter password: *****
------------------------------------------
update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’;
--进入界面后更改root密码
flush privileges; --刷新权限
--所有的语句都使用;结尾
------------------------------------------
show databases; --查询所有的数据库
use school; --切换数据库use 数据库名
show tables; --查询数据库中所有的表
databases student; --显示数据库中所有表的信息
create database westos; --创建一个数据库
exit;--退出连接
-- 单行注释;
/* 多行注释*/
DDL:数据库定义语言
DML:数据库操作语言
DQL:数据库查询语言
DCL:数据库控制语言
2、操作数据库
操作数据库>操作数据库中的表>操作数据库中表的数据
MySQL关键字不区分大小写
2.1、操作数据库
1、创建数据库
create database if not exists wesbos;
2、删除数据库
drop database if exists wesbos;
3、使用数据库
use school;
4、查看数据库
show databases;
2.2、数据库的列类型
数值
- tinyint=十分小的数据=1字符
- smallint=较小数据=2字节
- mediumint=中等大小数据=3字节
- int=标准整数=4字节
- bigint=较大的数据=8字节
- float=浮点数=4字节
- double=双精度浮点数=8字节
- decimal=字符型形式的浮点数= 金融计算的时候,一般使用的是decimal
字符串
- char=字符串固定大小=0-255
- varchar=可变字符串=0-65535
- tinytext=微型文本=2^8-1
- text=文本串=2^16-1
日期
- data YYYY-MM-DD
- time HH:mm:ss
- datatime YYYY-MM-DD HH:mm:ss
- timestamp 时间戳,19701.1到现在的毫秒数,较为常用
- year 年份表示
NULL
- 没有值,未知
- 注意,不要使用NULL运算,结果一定为NULL。
2.3、数据库的字段属性
Unsigned:
- 无符号的整数
- 声明了该列不能声明为负数
zerofill:
- 0填充的
- 不足的位数,使用0来进行填充 int(3),5—005;
非空
- 假设为 not null,如果不给他赋值,就会报错;
- NULL,如果不填写,默认为null!
默认
- 设置默认的值!
- sex,默认设置为 男 ,如果不只能该列为男,那么会有默认值男!
拓展 未来做项目用
每一个表都必须有以下五个字段
id 主键
version 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
2.4、创建数据库表(重点)
-- 目标:创建一个school数据库
-- 创建学生表(列,字段) 使用sql创建
-- 学号(int)登录密码(varchar) 姓名,性别varchar(20),出生日期(datatime),家庭住址
-- 注意:使用英文的(),表明和字段名称用``括起来
-- AUTO_INCREMENT 自增
-- 字符串使用单引号括起来
-- 所有的语句后面加 , (英文的),最后一个可以不用加
-- PRIMARY KEY 主键,一般一个表有一个唯一的主题。
CREATE DATABASE school;
USE school;
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`password` VARCHAR(16) 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;
格式
create table [if not exists] `表名`(
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
...
`字段名` 列类型 [属性] [索引] [注释]
)[表明类型][字符集设置][注释];
常用命令
show create database school; -- 查看创建数据库的语句
show create table student; -- 查看数据库表的语句
desc student; -- 查看表的结构
2.5、数据库的类型
/*
INNODB 默认使用
MYISAM 早些年使用
*/
- | MYISAM | INNODB |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表的空间大小 | 较小 | 较大,约为两倍 |
常规操作:
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事务的处理,多表多用户操作
在物理空间存在的位置
所有的数据都存在data目录下
MySQL引擎在物理文件上的区别:
- INNODB 在数据库中只有一个*.frm文件,以及上级目录下的ibdata1文件。
- MYISAM 对应文件
- *.frm 表结构的定义文件
- *.MYD 数据文件(data)
- *.MYI 索引文件(index)
设置数据库表的字符集编码
charset=utf8;
不设置的话,回事MySQL默认的字符集编码,Latin1,不支持中文。
在my.ini中配置默认的编码
character-set-server=utf8
2.6、修改删除表
- 修改
-- 创建一个teacher表
CREATE TABLE IF NOT EXISTS `teacher`(
`id` INT(15) NOT NULL AUTO_INCREMENT COMMENT '职工号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`age` INT(3) NOT NULL DEFAULT '0' COMMENT '年龄',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 修改表名:alter table 表名 rename as 新表名;
ALTER TABLE teacher RENAME AS teacher1;
-- 增加表的字段:alter table 表名 add 字段名 列属性;
ALTER TABLE teacher1 ADD age INT(11);
-- 修改表的字段 (重命名,修改约束)
ALTER TABLE teacher1 MODIFY age VARCHAR(11);
ALTER TABLE teacher1 CHANGE age age1 INT(2);
-- 删除表的字段: alter table 表名 drop 字段名
ALTER TABLE teacher1 DROP age1 ;
- 删除表
-- 删除表
DROP TABLE IF EXISTS teacher1;
所有的创建和删除表一定要加上判断
注意点:
1、`` 字段名,使用这个包裹。
2、注释 - -,/* */。
3、sql关键字对大小写不敏感,建议大家小写。
4、所有的符号字符使用英文。
3、MySQL数据库管理
3.1、外键(了解即可)
- 第一种方式:创建表的时候,添加外键约束
-- 创建一个年纪表
CREATE TABLE IF NOT EXISTS `grade` (
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(30) NOT NULL COMMENT'年级名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 创建一个学生表
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT'姓名',
`password` VARCHAR(16) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT'性别',
`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
`gradeid` INT(10) NOT NULL COMMENT'年级id',
`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
`email`VARCHAR(50) DEFAULT NULL COMMENT'邮箱',
PRIMARY KEY(`id`),
-- 学生表的gradeid定义为外键key
KEY `FK_gradeid` (`gradeid`),
--给这个外键添加约束(执行引用) references 引用
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
删除有外键关系的表的时候,必须要先删除应用别人的表(从表),在删除被引用的表(主表)
- 第二种方式:表创建成功后,添加外键约束
alter table `student`
add constraint `FK_gradeid` foreign key (`gradeid`) references `grade` (`gradeid`);
以上的操纵都是物理外键,数据库级别的外键,不建议使用(避免数据库过多造成困扰)
最佳实践
- 数据库就是单纯的表,只用来村书记,只有行(数据)和列( 字段)
- 如果想使用多张表的数据,想使用外键(程序去实现)
3.2、DML语言(全部记住)
数据库的意义: 数据存储,数据管理
DML语言:数据操作语言
- insert
- update
- delete
3.3、添加
- insert
-- 插入语句
-- insert into 表名([字段名1,字段名2,字段名3])values (`值1`),(`值2`),(`值3`,...)
INSERT INTO `grade`(`gradename`) VALUES ('大四');
-- 由于自增,主键可以省略(但如果不写字段表,那就是一一匹配)
INSERT INTO `grade` VALUES ('大三'); -- 代码错误,执行不成功
-- 一般写插入语句,字段名和插入的数据要一一对应
-- 插入多个字段
INSERT INTO `grade` (`gradename`) VALUES('大二'),('大一');
INSERT INTO `student`(`name`) VALUES('张三');
INSERT INTO `student`(`name`,`password`,`sex`) VALUES('张三','aaaaa','男');
INSERT INTO `student`(`name`,`password`,`sex`)
VALUES('李四','a1234','男'),('王五','aaaaa','女');
注意
1、字段和字段之间用英文的,隔开。
2、字段是可以省略的,但是后面的值一定要一一对应起来,不能少
3、可以同时插入多条数据,values后面的值需要使用,values(),(),··········