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
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 当父表数据删除或更新之后 子表对应的数据也删除或更新
(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'
root@%
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博客 ” ,链接:http://blog.itpub.net/20985606/viewspace-2147376/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/20985606/viewspace-2147376/