基本命令行操作
命令行连接
mysql -uroot -p
回车,然后在下一行输入密码,或者直接在p后写密码
修改密码
updata mysql.user set authentication_string=password('原密码') where user='root' and Host = 'localhost';
刷新权限
flush privileges;
查看所有数据库
show databases;
切换数据库
use 数据库名
成功会提示Database changed
查看数据库中所有表
show tables;
显示数据库中指定的表的信息
decribe 表名;
创建一个数据库
create darabase 数据库名;
退出连接
exit;
注意所有语句要用分号结尾,不分大小写
注释
#注释内容 --注释内容 /*注释内容*/
数据库语言
DDL 定义
DML 操作
DQL 查询
DCL 控制
CRUD增删改查
操作数据库
操作数据库>操作数据库中的表>操作数据库中表的数据
1.创建数据库
create database (if not exists) 数据库名
2.删除数据库
drop database (if exists) 数据库名
3.使用数据库
use `数据库名`
如果表明或者字段名是一个特殊字符,就需要带``
4.查看数据库
show database
数据库的列类型
数值
tinyint 十分小的数据 1个字节
smallint 较小的数据 2个字节
mediumint 中等大小的数据 3个字节
int 标准的整数 4个字节
bigint 较大的数据 8个字节
float 浮点数 4个字节
double 浮点数 8个字节
decimal 字符串形式的浮点数 金融计算的时候一般使用
字符串
char 字符串固定大小 0-255
varchar 可变字符串 0-65535 即String
tinytext 微型文本 0-255
text 文本串 0-65535 保存大文本
时间日期
data YYYY-MM-DD,日期格式
time HH:mm:ss,时间格式
datatime YYYY-MM-DD HH:mm:ss 最常用的时间格式
timestamp 时间戳,1970.1.1到现在的毫秒数
year 年份
null
未知数
不要使用null来计算
数据库的字段属性
Unsigned
无符号整数
声明该列不能声明为负数
zerofill
0填充的
不足的位数使用0来填充如5,005
非空 NULL not null
设置后字段不能为(null)
默认(defult)
默认值
自增
用来设计唯一的主键,主键类似于index,必须是整数类型
自动在上一条记录的基础上+1(默认)
创建数据库表
例子
CREATE TABLE IF NOT EXISTS `student` (`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`pswd` 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; -- 查看student数据表的定义语句
DESC student -- 显示表的结构
MylSAM和Innodb的区别
在物理空间存在的位置
所有的数据库文件都在data目录下,本质还是文件存储
·innodb在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
·MYISAM对应文件
*.frm 表结构的定义文件
*.MYD 数据文件(data)
*.MYI 索引文件(index)
修改和删除数据库表字段
-- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE teacher rename as teacher1
-- 增加表的字段 alter table 表名 add 字段名 列属性
alter table teacher1 add age int(3)-- 修改表的字段(重命名,修改约束)
-- alter table 表名 modify 字段名 列属性[]
alter table teacher1 modify age varchar(11) -- 修改约束
-- alter table 表名 change 新名 列属性[]
alter table teacher1 change age age1 int(1) -- 字段重命名-- 删除表的字段
alter table teacher1 drop age1-- 删除表
drop table if exists teacher1
change和modify的区别
数据库级别的外键
第一种添加外键的方式
create table if not exists `grade` (`gradeid` int(10) not null auto_increment comment '年级id',`gradename` varchar(50) not null comment '年级名称',primary key(`gradeid`)
)engine=innodb default charset=utf8-- 定义外键key-- 给这个外键添加约束(执行引用) references 引用
CREATE TABLE IF NOT EXISTS `student` (`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`pswd` 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 '邮箱',`gradeid` int(10) not null comment '年级id',PRIMARY KEY(`id`),key `FK_gradeid` (`gradeid`),constraint `FK_gradeid` foreign key (`gradeid`) references `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
第二种添加外键的方式,推荐
create table if not exists `grade` (`gradeid` int(10) not null auto_increment comment '年级id',`gradename` varchar(50) not null comment '年级名称',primary key(`gradeid`)
)engine=innodb default charset=utf8-- 定义外键key-- 给这个外键添加约束(执行引用) references 引用
CREATE TABLE IF NOT EXISTS `student` (`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`pswd` 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 '邮箱',`gradeid` int(10) not null comment '年级id',PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8alter table `student` add constraint `FK_gradeid` foreign key (`gradeid`) references `grade`(`gradeid`);
公式 alter table 表 add constraint 约束名 foreign key (`作为外键的列`) references 哪个表(哪个字段)
insert语句
语法:insert into `表名` (字段1,字段2....) values (值1)(值2)(.....)
主键自增可以省略
不写字段就会一一匹配
update语句
update 表名 set 列名1=新值,列名2=新值.... where 约束条件
如果没有约束条件默认给全部列替换新值
删除
delete
语法:delete from 表名 (where条件)
无条件全部删除,有条件删除满足条件数据
truncate命令
作用:完全清空一个数据库表,表的结构和索引约束不会变
语法:truncate 表名
二者异同
相同点:都能删除数据,都不会删除表结构
不同:
1.truncate 重置设置 自增列计数器会归零,delete不会
2.truncate 不会影响事务