初识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...)