Mysql安装
(1)官网
(2)mysql免安装
(3)集成环境 http://phpstudy.net/、http://phpstudy.net/download.html
2.mysql的结构组成
1.库 -->N个表-->M个记录
3.mysql是什么?
mysql是一个关系型数据库管理系统,瑞典MYSQL AB公司开发,Oracle收购,目前免费
4.使用mysql
1)免费
2)轻量级
3)打开软件速度快
5.mysql 在 ubuntu上安装 sudo apt-get install mysql-server
-- 基础命令
show variables like 'character_set_database';
show variables like '%char%';
show variables like '%char%';
show variables like '%colla%%';
service mysql stop
service mysql start
service mysql restart
service mysql status
cd /etc/mysql/conf.d
vim mysql.cnf
root@%
create user 'raymond' @'%' identified by 'raymond'
grant all on *.* to 'raymond'@'%'
flush privileges;
show databases;
\c 表示不执行
-- 创建数据库
create database 11_16_demo;
show databases like '%16%';
show create database 11_16_demo;
-- 创建表
create table 11_16_01(
name varchar(100),
age int(10)
);
show tables;
desc 11_16_01
rename table '11_06_01' to '11_06_02';
show databases;
-- 创建数据库
create database 11_18;
-- 创建一张表 这种 不推荐
create table 11_18.user(
name varchar(50),
age int
);
use 11_18;
use user
show tables;
-- 查看表结构
desc user; /describe user; show columns from user;
-- 查看表的创建过程
show create table user;
-- mysql 有一种方式可以比较规整的查看
show create table user\G
show create table user\g
-- 改表名
rename table '旧的表' to '新的表名'
--修改表结构 增加 修改 删除
-- \c 表示不执行语句
alter table user add gender varchar(2);
--修改
alter table user modify gender varchar(3);
-- 修改字段名
alter table user change gender tel int;
-- 删除
alter table user drop tel;
--删除表
drop table user;
driop table tab1 tab2; #多长表
-- 插入数据 2方法
1.不指定字段类型顺序 然后
insert into user values('xm',18,177);
-- 同时插入多条
insert into user values('xm',18,177),('h',19,1777);
2.指定字段进行插入数据
insert into user(name,age)valuses ('hehe',15);
-- 查询数据
select * from user;
select name from user;
select name,age from user;
--mysql 的用户是放在mysql user表中
select user,host from mysql.user;
--更新
update user set tel = 12222 where name = 'h';
-- 删除 不可逆 所有删除最简单
delete from user where name = 'w';
--列属性
约束我们字段 靠的是数据类型,还需要一些额外约束
null(空)/not null (非空)默认就是null
真正的设计数据库的时候,一般都尽可能保证数据非空 空数据 不能参加运算
create table user1(
name varchar(20) not null,
age int
);
-- 插入数据
insert into user1 values('which',18);
insert into user1 values('haha',17);
insert into user1 values('null',18); #不行的
---当前
alter table user modify name varchar(30) not null;
default 默认值
create table user1(
name varchar(20) not null,
age int default 28
);
insert into user(name,age) values ('which001',19);
insert into user2 values ('haha',default);
insert into user2(name) values ('hehe');
alter table user modify age int default 20;
-- key
--主键 一张表只能有一个主键,主键还不能重复(具有唯一性)
一般 绝大部分情况 主键我们是不会给 业务字段 会给逻辑字段(id)
--增加主键
-- 在创建表时增加主键
create table user3(
id int primary key,
name varchar(20) not null,
age int default 28
);
主键不能为空,不能重复 符合主键
create table user4(
id int ,
name varchar(20) not null,
age int default 28,
primary key(id,na'me)
);
-- 修改表结构,来增加主键
alter table user add id int primary key;
alter table user modify id int primary key;
-- 删除主键
alter table user4 drop primary key;
自增 :一般都是配合主键使用
id 设置一个数字
--创建表
create table user5(
id int primary key auto_increment,
name varchar(20) not null,
age int default 28
);
insert into user5 values(default,'heha',default);
--通过查看创建 可以查看下一次自增的值
show create table user5;
++++++++++++++++++++++++++++++++++++++++
2017-11-21
# 列属性
null / not null
default
primary key
auto_increment
-- 创建表
create table user(
id int primary key auto_increment,
name varchar(20) not null,
age int default 18
);
-- 查看表创建过程
show create table user;
unique key # 唯一键
/*
唯一键的本质和主键 是一样 区别
主键 唯一且不为空
唯一键 保证数据具有唯一性 一张表可以有多个唯一键 唯一键默认运行为空
*/
-- 在创建表的时候给唯一键
create table user1(
id int primary key auto_increment,
name varchar(20) not null,
email varchar(20) unique key
);
### 索引名字 唯一键在设置的时候 不取名 默认会以字段名做为索引名字
-- 在创建表的时候给唯一键
create table user2(
email varchar(20) not null,
unique key `un_email` (email)
);
/*
当你这张表 没有主键的时候 刚好有一个 字段 唯一且不为空 这个时候
就显示的主键 其实 还是唯一键
*/
insert into user2 values('tz@qq.com'),('tzxx@qq.com');
insert into user2 values('tz@qq.com'); -- 失败
/*
删除 alter table
*/
alter table user2 drop unique key; -- 不行的
alter table user2 drop index `un_email`; -- 引号只有在插入数据的时候 才能用
-- alter table user2 modify email varchar(20);
## 索引
/*
所有的索引 都是建立在字段之上
意义
1. 可以提高查询效率
2. 约束数据的有效(唯一性)
*/
### 外键 外键就是不在自己表里 一张表的一个字段(不是主键)
### 指向了另外一张表的主键 这个键 我们可以称为外键
create table user(
id int primary key auto_increment,
name varchar(20) not null
);
create table article(
id int primary key auto_increment,
title varchar(20) not null,
u_id int,
foreign key(u_id) references user(id)
);
/*
建立外键 有要求
1. 你的引擎必须是 innoDB 如果不是话 外键会建立成功 但是没有约束
2. 外键的字段类型 必须和 父表(没有外键的表) 的主键类型 必须一致
3. 外键的名字是唯一
*/
-- 外键必须要求字段本身必须是一个索引 才能建立
-- 如果不是 就会先自动建立一个索引 在建立外键
/*
外键有什么用 关联两张表
当父表某个字段被关联 被关联的数据不能随意删除或更新
*/
-- 外键怎么删除
alter table article drop foreign key article_ibfk_1;
create table test(
id int primary key auto_increment,
name varchar(20) not null
);
create table test1(
id int primary key auto_increment,
title varchar(20) not null,
u_id int,
CONSTRAINT `idx_user_id` foreign key(u_id) references test(id)
);
### 表关系
/*
用户 和 文章
关系型 最重要的 就是关系
一对一
一张表的一条对应另外一张表的一条记录 只能对应一条
用户 用户拓展表
一对多
一的是父表 多的那个是子表
一张表的一条记录对应另外一张表多条或者一条记录
用户 文章
多对多
标签 文文章
一张表一条数据对应另外一张表多条记录
另外一张表的一条记录对应这张表的多条记录
*/
create table user(
id int primary key auto_increment,
name varchar(20) not null
);
create table user_extend(
);
create table article(
id int primary key auto_increment,
title varchar(20) not null,
user_id int,
foreign key(user_id) references user(id)
);
create table tag(
id int primary key auto_increment,
name varchar(20) not null
);
create table article_tag(
article_id int,
tag_id int,
primary key(article_id,tag_id),
constraint `idx_article_id` foreign key(article_id) references article(id),
constraint `idx_tag_id` foreign key(tag_id) references tag(id)
);
----------
2017-12-5
外键 一定不是自己表里的,
外键必须要求字段本身就是一个索引 才能创建外键 如果说字段本身不是索引
外键就会先创建一个索引 然后在创建外键
外键有条件:
1)外键要求数据库引擎必须inndoDB show engines 查看数据可以支持的引擎
2)外键的字段类型必须和父表类型一致
3)外键的名字不能重复show create table
外键的约束
父表不能随意删除更新
子表 当我插入一条父表不存在的数据 也会报错
外键有的模式
1.restrict 模式父表不能随意更新或删除
2.set null 当父表数据删除之后 子表对应的数据置空 前提 这个外键字段 支持 为空
3.cascade 当父表数据删除或更新之后 子表对应的数据也删除或更新
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20985606/viewspace-2147376/
,如需转载,请注明出处,否则将追究法律责任。