文章目录
mysql和oracle的区别
oracle | mysql |
---|---|
数据库有一个, 数据库名一般默认情况下叫: orcl | 用户默认有一个, 这个用户叫 root |
在数据库下有很多用户 | 在用户下有很多数据库 |
用户下有很多数据库表 | 每个数据库中有若干个数据库表 |
MySQL的安装以及服务启动
mysql的启动
- 查看mysql服务器是否已经启动
# 查看mysql服务器是否已经启动
# 查看状态
$ systemctl status mysqld
- 启动mysql
$ systemctl start mysqld
- 关闭mysql
$ systemctl stop mysqld
- 重新启动mysql
$ systemctl restart mysqld
- 开机启动mysql
$ systemctl enable mysqld
- 关闭开机启动mysql
$ systemctl disable mysqld
登录mysql服务器
# mysql的默认端口的 3306
# 本地连接不需要使用-h, 如果数据库使用默认端口不用指定-P
$ mysql -u 用户名 -p -h mysql服务器IP -P mydql服务器端口 # 回车, 提示输入密码
# 如果安装mysql之后有一个临时密码, -p后边跟临时密码, 这个命令不能登录
$ mysql -u用户名 -p密码
数据库的CURD
对数据库进行增(Create)、改(Update) 、查(Retrieve) 、删(Delete)操作。
查看数据库
- 显示所有数据库
mysql> show databases;
- 显示创建数据库的语句信息
mysql> show create database 表名;
使用数据库
我们以root用户登录, 用户下有很多数据库, 需要指定, 当前使用哪一个数据库, 操作的就是那个数据库中的数据
mysql> use 数据库名;
创建数据库
-- IF NOT EXISTS 表示只有数据库不存在的时候才创建,如果存在同名就不再执行该语句
-- create_specification是建库的一些选项
-- 关键字不区分大小写
CREATE {DATABASE} [IF NOT EXISTS] db_name
[create_specification [, create_specification] ...]
创建一名为myTest的数据库
mysql> create database myTest;
创建一个使用 latin1 字符集的数据库
mysql> create database myTest character set latin1; /* utf8 */
修改数据库
-- 修改字符集, 不能改名
alter database itcast character set utf8;
删除数据库
drop database 数据库名;
表的CURD
对表本身进行操作:创建,查看,修改,删除
创建表
-
mysql中表名区分大小写, 列名不区分大小写
数据类型
类型 说明 取值范围 tinyint 很小整数 1字节 smallint 小整数 2字节 mediumint 中等 3字节 int 普通 四字节 bigint 打整数 8字节 float 单精度浮点数值 4字节 double 双精度浮点数值 8字节 decimal 压缩的定点数值 M+2字节 -
float/double: 指定精确到小数点以后第几位, 比如: 精确到后3位
-
通过计算得到一个数据: 12.345678
-
这个数的678会被抹掉
decimal
- 完整的保存精度, 最少有小数后有两位
示例:12.3 保存为: 12.30
日期类型
|数据类型| 格式
|:--|:--:|
date|YYYY-MM-DD
time|HH:MM:SS
year|YYYY
datetime|YYYY-MM-DD HH:MM:SS
timestamp|YYYYMMDD HHMMSS
字符类型
类型 | 说明 |
---|---|
cahr | 定长字符串 |
varchar | 变长字符串 |
tinyblob | 不超过255个字符的二进制字符串 |
tinytext | 短文本字符串 |
blob | 二进制形式的长文本数据 |
text | 长文本数据 |
mediumblob | 二进制形式的中等长度文本数据 |
mediumtext | 中等长度文本数据 |
logngblob | 二进制形式的极大文本数据 |
longtext | 极大文本数据 |
create table 表名(
列名 text [default 'xxx'],
列名 类型 [default value],
类名 类型 [default value],
......
);
修改表
- 修改表名
-- oracle和mysql相同
rename table oldN to newN;
- 添加一个字段
-- oracle
alter table 表名 add 列名 列的类型;
-- mysql
alter table 表名 add column 列名 列的类型;
- 修改一个字段
-- oracle
alter table 表名 modify 列名 列的类型;
-- mysql
alter table 表名 modify column 列名 列的类型;
- 删除一个字段
-- mysql和oracle相同
alter table 表名 drop column 列;
-- mysql中没有对对字段的rename操作
- 修改表的字符集
alter table 表名 character set utf8;
删除表
drop table 表名;
-- oracle中可以这么做, mysql中不行
drop table 表名 purge;
查看表
查看当前数据库下的数据库表
-- 当前使用的数据库下的表
mysql> show tables;
- 查看指定表的创建语句
mysql> show create table 表名;
- 查看表结构
mysql> desc 表名;
表数据的CURD
- 插入数据
-- 在values(列的值, 列的值, ....)中将表有的字段值都指定出来的时候, 列名可以省略
insert into 表名[(列名, 列名, ...)] values(列的值, 列的值, ....);
- 更新数据
update 表名 set 列名=新值 where 列名=值;
- 删除数据
delete from 表名; -- 删除所有行
delete from 表名 where 列名=值; -- 删除满足条件的行
- 查询数据
select *|列名|表达式 from 表名 where 条件 order by 列名 having 条件 order by asc|desc;
表的约束
- 定义主键约束 primary key: 不允许为空,不允许重复
- 定义主键自动增长 auto_increment
- 定义唯一约束 unique
- 定义非空约束 not null
- 定义外键约束 constraint ordersid_FK foreign key(ordersid) references orders(id)
- 删除主键:alter table tablename drop primary key ;
check约束在MySQL中语法保留,但没有效果。
示例:
reate table myclass (
id INT(11) primary key auto_increment,
name varchar(20) unique
);
create table student (
id INT(11) primary key auto_increment,
name varchar(20) unique,
passwd varchar(15) not null,
classid INT(11),
constraint stu_classid_FK foreign key(classid) references myclass(id)
mysql中文乱码问题
两层因素:
1: MySQL自身的设计
2: 操作系统的语言集