855 views
Mysql

2.SQL简单介绍

文章目录

初识sql语言(结构化查询语言)

  • DDL 数据库定义语言:数据库、表、视图、索引 如:create、drop、alter
  • DML 数据库操纵语言:insert、delete、update
  • DCL 数据库控制语言:控制用户访问权限gtant、revoke
  • SQL 数据库查询语言:select

系统数据库

  • information_schema:虚拟库,主要存储系统中的数据库对象信息,用户表信息、权限信息
  • performance_schema:主要存储数据库服务器的性能数据
  • mysql:授权库
  • sys:存储数据库服务器性能参数

数据类型

--定义字段时,必须指定数据类型**

- 数值类型
  + 整数 int
  + 浮点 float double
  + 定点 dec
  + 位类 bit
- 字符串类型
  + char系列 char varchar
  + text类型 text
  + blob类型 blob
  + binary类型
  + 枚举类型 enum
  + 集合类型 set
- 时间和日期类型 date time datetime year 

库和表的基本操作

  • 增、删、改、查
-- 数据库的操作
#创建数据库ying
create database ying;
#查看创建数据库的语句
show create database ying;
#查看所有数据库
show databases;
#删除数据库
drop database ying;
#修改数据库编码
alter database ying defaule chatacter set gbk collate gbk_bin;
#创建数据库并设置编码
CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
#移动到ying库中(使用ying数据库)
use ying
#查看当前使用的数据库
select database();
#简单授权
grant all on *.* to 'root'@'%' identified by '123456'; 
#刷新权限(一般用于数据库用户信息更新后)
flush privileges;
#显示数据库版本
select version();
#显示时间
select now();


-- 数据表的操作
#查看当前数据库中所有表
show tables;
#创建表
- auto_increment表示自动增长
- not null 表示不能为空
- primary key 表示主键
- default 默认值
- create table 数据表名字 (字段 类型 约束[, 字段 类型 约束]);
create table demo1 (id int,name varchar(30));

create table demo2(
id int primary key not null auto_increment,
name varchar(30)
);

#查看表结构
desc demo2;

#创建students表(id、name、age、high、gender、cls_id)  
create table students(
id int not null primary key auto_increment,
name varchar(30),
age tinyint unsigned default 18,
high decimal(5,2),
gender enum('男','女','保密')  default '保密',        -- 存数据的时候 只能存 男或者女
cls_id int 
); 
#创建classes表(id、name)
create table classes(
id int primary key not null auto_increment,
name varchar(30)
);
#查看表的创建语句
show create table students;
#修改表-添加字段
alter table students add birthday date;
#修改表-修改字段:不重命名版
-- alter table 表名 modify 列名 类型及约束;
alter table students modify birthday date default '1990-1-1';
#修改表-修改字段:重命名版
-- alter table 表名 change 原名 新名 类型及约束;
alter table students change birthday birth date default '1990-1-1';
#修改表-删除字段
-- alter table 表名 drop 列名;
alter table students drop high;
#删除表
drop table 表名;
#删除表里面的数据,但不删除表
delete from ying where name='ying'
-------

#向students表插入 一个学生信息  
+--------+-------------------------------+------+-----+------------+----------------+
| Field  | Type                          | Null | Key | Default    | Extra          |
+--------+-------------------------------+------+-----+------------+----------------+
| id     | int(11)                       | NO   | PRI | NULL       | auto_increment |
| name   | varchar(30)                   | YES  |     | NULL       |                |
| age    | tinyint(3) unsigned           | YES  |     | 0          |                |
| gender | enum('男','女','中性','保密')  | YES  |     | 保密       |                |
| cls_id | int(10) unsigned              | YES  |     | NULL       |                |
| birth  | date                          | YES  |     | 1997-01-01 |                |
+--------+-------------------------------+------+-----+------------+----------------+
#主键字段  0 null default 来占位
insert into students values(0,'影',18,'男',1,'1990-1-1');  -- id是多少?
insert into students values(null,'ying',19,'男',1,'1990-1-1');  
insert into students values(default,'ying',19,'男',1,'1990-1-1');  

#枚举类型插入     下标是从1开始的
insert into students values(default,'ying',19,1,1,'1990-1-1');  

#部分插入
#insert into 表名(列1,...) values(值1,...)        -- 非空字段
insert into students(`gender`) values(2);
insert into students(`name`,`gender`) values('ying',2);
#多行插入
insert into students values
(default,'ying',19,'男',1,'1990-1-1'),
(default,'666',20,'男',1,'1990-1-1');  
#修改
#update 表名 set 列1=值1,列2=值2... where 条件; 
#修改 名字为ying 改成钢铁侠
update students set name='钢铁侠';      -- 不加where 全部修改
update students set name='python' where name='ying'; 

update students set name='无名' where id=6;     -- 修改id 为3的
update students set name='影',gender='保密' where id=7;

# 删除
#物理删除
#delete from 表名 where 条件
delete from students;  --- 删除的是 数据!!!  
delete from students where id = 12;
# 逻辑删除
#is_delete 表示  是否删除  1 删除   0 未删除
查找 select * from students where is_delete=0;
#修改
update students set is_delete = 1 where id=6; 

#查询基本使用
select 去重选项 字段列表[as 字段名] from 数据表 
where [group by 子句] [having子句] [order by 子句] [limit子句];

#查询所有列
select * from students;
#去除重复字段的查询  distinct 整个查询的行是否重复
select distinct name from students;
#查询指定列
#select 列1,列2,... from 表名;
select name,age,gender from students;
#可以使用as为列或表指定别名
select name as n,age,gender from students_abc_demoas_asdasda  where n='ying';
select name as n,gender from students where name='ying';
select name as 姓名,gender from students where name='影';

表完整性约束

用于保证数据的完整性和一致性

#约束条件            说明
PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK)    标识该字段为该表的外键
NOT NULL            标识该字段不能为空
UNIQUE KEY (UK)     标识该字段的值是唯一的
AUTO_INCREMENT      标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT             为该字段设置默认值

UNSIGNED 无符号
ZEROFILL 使用0填充
=======================================================================
1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
sex enum('male','female') not null default 'male'
age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
3. 是否是key
主键 primary key
外键 foreign key
索引 (index,unique...)
影子专属博客 赣ICP备17013143号