MySQL基础

MySQL  关系型关联数据库管理系统

库级操作语句

进入数据库:

 mysql -uusername -ppassword 

退出数据库:

exit 

q 

显示所有库:

 show databases; 

创建库:

 create database [if not exists] db_name; 

显示库创建信息:

 show create database db_name; 

删除库:

 drop database [if exists] db_name;  

切换当前库:

 use db_name; 


 表级操作语句

显示所有表:

 show tables; 

创建表:

 create table [if not exists] tb_name(create_definition,...); 

 create table [if not exists] tb_name(id int, name varchar(20));

显示表创建信息:

1 show create table tb_name;

2 desc[ribe] tb_name;  

删除表:

 drop table tb_name; 


表增删改查

指定插入:

 INSERT INTO tb_name(col_names) VALUES (col_values); 

全列插入:

 INSERT INTO tb_name VALUES (all_values); 

多行插入:

 INSERT INTO tb_name(col_names) VALUES (value_1), (value_2), …; 

指定列查询:

 SELECT col_names FROM tb_name; 

全列查询:

 SELECT * FROM tb_name; 

带条件查询:

 SELECT col_names FROM tb_name WHERE conditions;  

 SELECT col_names FROM tb_name WHERE id > 2;  

改:

 UPDATE tb_name SET field_1=value_1, field_2=value_2,… WHERE a_field = a_value; 

删:

  DELETE FROM tb_name WHERE a_field = a_value; 

注意: 改和删一定要写where条件,否则会删除或改变全部数据

 


数据类型:

 1 create table tb2(
 2      id INT,                                 #默认长度11
 3      name VARCHAR(20),             #指定长度,最多65535个字符。   ***变长
 4      sex  CHAR(4),                 #指定长度,最多255个字符。     ***定长
 5      price DOUBLE(4,2),        #双精度浮点型,m总个数,d小数位
 6      detail text,                    #可变长度,最多65535个字符
 7      dates DATETIME,                #日期时间类型 YYYY-MM-DD HH:MM:SS
 8      ping  ENUM('好评','差评’)      #枚举, 在给出的value中选择
 9 );
10 
11 insert into tb2 value( 1,'裤子','',20.0,'这条裤子超级好!!!',now(),'好评');    

约束

约束是一种限制, 通过退表的数据做出限制,来确保表中数据的完整性,唯一性。

约束类型

默认

非空 唯一 自增长 主键 外键 
关键字 default not null unique key auto_increment primary key foreign key

默认约束 default:

# 初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值
1
create table tb( 2 id int, 3 name varchar(20), 4 age int default 18 5 );

# 创建表后添加默认约束

 alter table tb modify age int default 20;

 # 取消默认约束

 alter table tb modify age int; 

非空约束 not null:

1 CREATE TABLE tb1(
2      id int,
3      name varchar(20) NOT NOLL
4 );

# 创建表后添加非空约束

 alter table tb1 modify id int not null; 

# 取消非空约束

 alter table tb1 modify id int ; 

唯一约束 unique key:

1 CREATE TABLE tb2(
2      id int UNIQUE KEY,
3      name varchar(20)
4 );

# 创建表后添加唯一约束

 alter table tb2 modify name varchar(20) unique key; 

# 取消唯一约束

 alter table tb2 modify name varchar(20); 

自增长 auto_increment:

# 自动编号,一般与主键组合使用,一个表里面只有一个自增长默认情况下,起始值为1,每次的增量为1。
1
create table tb3( 2 id int primary key auto_increment, 3 name varchar(20) 4 )auto_increment =100;

# 创建表后添加自增长

 alter table tb3 modify id int auto_increment; 

# 取消自增长

 alter table tb3 modify id int; 

主键约束 primary key:

# 作用 可以唯一标识一条数据,每张表里只能有一个主键
# 特性 非空唯一。当表里没有主键时,第一个出现非空且唯一的列,被当作主键。
1
create table tb4( 2 id int primary key, 3 name varchar(20) not null 4 );

# 创建表后添加主键

 alter table tb3 add primary key(id); 

# 删除主键

 alter table tb4 drop primary key; 

外键约束 foreign key:

 1 create table a(
 2 a_id int primary key auto_increment,
 3 a_name varchar(20) not null
 4 );
 5 
 6 CREATE TABLE b (
 7   b_id int auto_increment,
 8   b_name varchar(20),
 9   constraint 外键名字 FOREIGN KEY (b_id) REFERENCES a(a_id)
10 );
11 
12 # b是a的子表
13 # b表中的b_id 字段,只能添加 a_id中 已有的数据。
14 # a表中a_id  被参照的数据,不能被修改和删除

# 创建表后添加外键

 alter table b add constraint AB_foreign foreign key(b_id) references a(a_id); 

# 删除外键

 alter table b drop foreign key AB_foregin key; 


表结构修改

表描述

desc tb_name;

添加列

alter table tb_name add [column] name varchar(10);

删除列 alter table tb_name drop [column] name;
修改字段类型 alter table tb_name modify gender char(10);
修改字段名称(change比modify多了修改名称功能) alter table tb_name change name new_name char(10);
修改表名 alter table tb_name rename to new_students;

子查询

1 SELECT grade FROM grades  ## 在查询张三成绩前,需要获得他的学号
2     WHERE student_number = (SELECT number FROM students WHERE name='张三');  ## 嵌套查询张三学号的语句

交叉连接(笛卡尔连接)

内连接

左表 join 右表 on 左表.字段 = 右表.字段;

select name, subject_number as number,grade FROM students JOIN grades ON students.number = grades.student_number;

稍作修改  

select name, title, grade from students join grades on students.number = grades.student_number join subjects on grades.subject_number=subjects.number;


编码/用户/权限

编辑配置文件

 vim /etc/mysql/mysql.conf.d/mysqld.cnf 

重启数据库

 sudo service mysql restart 

远程连接

配置文件

 vim /etc/mysql/mysql.conf.d/mysqld.cnf 

第一步 修改监听IP

bind 0.0.0.0

第二步 给用户添加远程访问权限

update user set host = '%' where user = 'root';

第三步 重启数据库

sudo service mysql restart

用户权限

修改密码(记得密码)

 set password=password('new_password') 

修改密码(忘记密码)

1、进入mysqld.cnf文件添加skip-grant-tables(跳过登录)

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf   在[mysqld]范围内添加 skip-grant-tables

2、登录mysql修改密码

use mysql

update mysql.user set authentication_string=password('qwe123') where user='root';

update mysql.user set plugin = 'mysql_native_password';

flush privileges;

exit

3、注释 skip-grant-tables (在43行)

创建用户

create user 'username'@'localhost' identified by 'password';

用户授权

grant 权限 on 数据库.* to ‘用户名'@'登录主机' identified by “密码";

取消用户授权

revoke privilege on databasename.tablename from 'username'@'%‘;

alter  修改已经存在的表
create 建立新的数据库或表
select 查找记录
update 修改记录
insert 增加表的记录
delete 删除表的记录
usage 只允许登录
all 允许做任何操作
 drop  删除数据库或表

创建数据库自定义编码

 create database tb_name character set gbk; 

创建数据表自定义编码

 create table tb_name(id int ) charset utf8; 

原文地址:https://www.cnblogs.com/Selling-fish-bears/p/9291202.html