MySql基础

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博客 ” ,链接:http://blog.itpub.net/20985606/viewspace-2147376/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20985606/viewspace-2147376/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值