初识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
库和表的基本操作
- 增、删、改、查
-- 数据库的操作#创建数据库yingcreate 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 必须为正值(无符号) 不允许为空 默认是203. 是否是key主键 primary key外键 foreign key索引 (index,unique...)
