SQL语句详解------数据库表

来源:互联网 发布:it设备管理 编辑:程序博客网 时间:2024/05/19 14:01

把之前零零散散的SQL资料整理了一下。

总结了一些SQL语句的使用。

感谢所有为我提供帮助的博客,太多太久远,无法一一标明,望谅解。

一.需要的的数据库表

下面是四个表的结构

Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) 教师表

以及创建步骤:

1.创建一个数据库

create  database 数据库名  【charset  字符编码名】 【collate  排序规则名】;

插入知识点:

//修改数据库
alter  database 数据库名  【charset  新的字符集名】  【collate  新的排序规则名】;

//删除数据库
drop  database  数据库名;

//显示当前mysql数据库系统中的所有数据库;
show  databases;

//选择(使用,进入)某个数据库——只有进入某数据,才能对该数据的数据进行操作。
use   数据库名;


//创建一个数据库,名字叫school,字符编码utf8;create database school charset utf8;

2.创建四个表

类型名【(长度)】  【unsigned】 【zerofill】

1,长度:就是用来设定要“显示”的长度位数(数字个数),
2,unsigned:就是用于设定该类型中的数字没有符号(正负号),即没有负数;
3,zerofill:就是“填充0”的意思,即如果一个数字,没有达到指定的长度,则系统就会用0填充到其左边

//创建一个学生表create table Student(    Sid varchar(20),    Sname varchar(20),    Sage varchar(20),    Ssex varchar(20));    //创建一个课程表 create table Course(    Cid varchar(20),    Cname varchar(20),    Tid varchar(20));//创建一个成绩表create table SC(    Sid varchar(20),    Cid varchar(20),    score varchar(20));//创建一个教师表create table teacher (    Tid varchar(20),    Tname varchar(20));



插入知识点:

其中的varchar是指字段类型,各种类型如图所示:


1.整数类型

整数类型,根据分配给其所用的存储空间大小,又细分为:
tinyint, smallint, mediumnint, int,bigint

      


2.小数类型

分为:
浮点型:
单精度浮点型:float,其精度大约可以精确到6-7位;
双精度浮点型:double,其精度大约可以精确到15位左右;
特点:浮点型的小数,其内部的二进制形式,很可能是非精确的(了解就行了);
定点型:
decimal,或使用dec。
形式: decimal(总精度,小数部分精度);
说明:
1,总精度,其实就是可以用于精确表达的位数,包括小数部分的位数和整数部分的位数;
2,总精度最大为65位,小数部分的精度(位数),最大为30位。

3.字符类型

1.char类型:

定长字符串,表示设定的长度,其存储的时候,就是该长度——不够就会自动补空格填满;
最大可设定为255,表示可存储255个字符;

2.varchar类型:

变长字符串,表示设定的长度,是可存储的最大长度,实际存储长度可以小于该长度;
该类型存储的时候,还需要在字段内的最前面额外存储该字段的实际长度;
最大可设定为65533,表示最大可存储65533个字符;
因为考虑因素:一行的总的存储空间限制是65535字节,
但有考虑字符编码的问题,又会出现:
如果存储的是纯英文字符,则实际最多可存储65533个字符;
如果存储的是纯gbk的中文字符,则实际最多可存储的是65533/2个字符;
如果存储的是纯utf8的中文字符,则实际最多可存储的是65533/3个字符;

3.text类型: 

它通常用于存储“大文本”,因为其可存储65535个字节,并且,不受行存储空间的限制;

4.enum类型:

用于存储若干个“可选项之一”的一种字符类型。
通常,是在字段定义时,预先设定多个选项,而且是作为单选项,实际存储数据的时候,就可以选择其中一个存入数据库。
它适合于存储在网页中的“单选项”数据,比如:单选按钮,下拉列表选项值等等;
形式:
enum(‘单选项1’, ‘单选项2’, ‘单选项3’, ....... ); //最多65535个。
说明:
这些选项,在系统内部,实际对应的是如下这些数字值:1,  2,  3,  4,  5,  6,  ....

4.set类型:

用于存储若干个“多选项”的一种字符类型。
通常,是在字段定义时,预先设定多个选项,而且是作为多选项,实际存储数据的时候,就可以选择其中若干个选项值存入数据库。
它适合于存储在网页中的“多选项”数据,比如:多选按钮;
形式:
set(‘多选项1’, ‘多选项2’, ‘多选项3’, ....... ); //最多64个。
说明:
这些选项,在系统内部,实际对应的是如下这些数字值:1,  2,  4,  8,  16,  ....

    3.时间和日期类型



date类型:
用于存储(记录)年月日这种时间的数据,其范围可以为:'1000-01-01'到'9999-12-31'


time类型:
用于存储(记录)时分秒这种时间的数据,其范围可以为:'-838:59:59'到'838:59:59'


datetime类型:
用于记录年月日时分秒这种较为精确的时间数据,其范围为:'1000-01-01 00:00:00'到'9999-12-31 23:59:59'


year类型:
用于记录一个年份数据,通常就是指年份数字,比如2018,1983,其有两种形式:
使用一个数字:
2位数字:1-99之间
4位数字:1901-2155之间
使用一个字符串:
2位字符串:'00'到'99'
4位字符串:'1901'到'2155'


timestamp类型:
用于记录一个“当前时间”的精确的时间戳——也就是某个时刻的对应整数值;
该整数值,表示,从1970年1月1日0时0分0秒开始算起到该时候所经历的秒数;
而且,其有如下特征:
该字段的值,会在一个表的某行数据执行insert或update的时候,自动获取该时刻的时间戳值;


注意:
作为时间日期类型的数据,如果是在代码中插入一个具体的字面数据值,则需要用单引号引起来——跟字符类型一样。

3.插入语句

insert teacher(Tid,Tname) values(001,'李老师');insert teacher(Tid,Tname) values(002,'王老师');insert teacher(Tid,Tname) values(003,'张老师');insert teacher(Tid,Tname) values(004,'曾老师');insert teacher(Tid,Tname) values(005,'杨老师');insert teacher(Tid,Tname) values(006,'高老师');insert teacher(Tid,Tname) values(007,'曾老师');insert Course(Cid,Cname,Tid) values(001,'数学','李老师');insert Course(Cid,Cname,Tid) values(002,'语文','王老师');insert Course(Cid,Cname,Tid) values(003,'英语','张老师');insert Course(Cid,Cname,Tid) values(004,'化学','曾老师');insert Course(Cid,Cname,Tid) values(005,'历史','杨老师');insert Course(Cid,Cname,Tid) values(006,'地理','高老师');insert SC(Sid,Cid,score) values (1001,'001',50);insert SC(Sid,Cid,score) values (1001,'002',43);insert SC(Sid,Cid,score) values (1001,'004',80);insert SC(Sid,Cid,score) values (1001,'006',67);insert SC(Sid,Cid,score) values (1002,'001',98);insert SC(Sid,Cid,score) values (1002,'003',93);insert SC(Sid,Cid,score) values (1002,'004',93);insert SC(Sid,Cid,score) values (1002,'006',43);insert SC(Sid,Cid,score) values (1003,'001',80);insert SC(Sid,Cid,score) values (1003,'005',70);insert SC(Sid,Cid,score) values (1003,'003',30);insert SC(Sid,Cid,score) values (1004,'006',59);insert SC(Sid,Cid,score) values (1004,'001',60);insert SC(Sid,Cid,score) values (1004,'004',80);insert SC(Sid,Cid,score) values (1005,'003',80);insert SC(Sid,Cid,score) values (1005,'005',60);insert SC(Sid,Cid,score) values (1005,'001',30);insert SC(Sid,Cid,score) values (1005,'004',70);insert SC(Sid,Cid,score) values (1006,'001',90);insert SC(Sid,Cid,score) values (1006,'005',43);insert SC(Sid,Cid,score) values (1006,'002',92);insert SC(Sid,Cid,score) values (1007,'001',75);insert SC(Sid,Cid,score) values (1008,'002',48);insert SC(Sid,Cid,score) values (1008,'003',60);insert SC(Sid,Cid,score) values (1008,'001',100);insert SC(Sid,Cid,score) values (1009,'002',10);insert SC(Sid,Cid,score) values (1009,'005',18);insert SC(Sid,Cid,score) values (1010,'001',65);insert SC(Sid,Cid,score) values (1010,'003',51);insert SC(Sid,Cid,score) values (1011,'001',68);insert SC(Sid,Cid,score) values (1012,'002',83);insert SC(Sid,Cid,score) values (1012,'003',80);insert SC(Sid,Cid,score) values (1012,'005',60);insert SC(Sid,Cid,score) values (1013,'001',60);insert SC(Sid,Cid,score) values (1013,'006',50);insert SC(Sid,Cid,score) values (1013,'003',90);insert SC(Sid,Cid,score) values (1014,'002',43);insert SC(Sid,Cid,score) values (1014,'001',75);insert SC(Sid,Cid,score) values (1014,'005',83);insert Student(Sid,Sname,Sage,Ssex) values (1006,'博尔术',42,'男');insert Student(Sid,Sname,Sage,Ssex) values (1001,'范仲淹',02,'男');insert Student(Sid,Sname,Sage,Ssex) values (1002,'韩愈',22,'男');insert Student(Sid,Sname,Sage,Ssex) values (1003,'李存勖',92,'男');insert Student(Sid,Sname,Sage,Ssex) values (1004,'博尔术',22,'男');insert Student(Sid,Sname,Sage,Ssex) values (1005,'安禄山',52,'男');insert Student(Sid,Sname,Sage,Ssex) values (1007,'嬴扶苏',32,'男');insert Student(Sid,Sname,Sage,Ssex) values (1005,'孔子',62,'男');insert Student(Sid,Sname,Sage,Ssex) values (1009,'李香君',52,'女');insert Student(Sid,Sname,Sage,Ssex) values (1010,'王昭君',42,'女');insert Student(Sid,Sname,Sage,Ssex) values (1011,'文成公主',12,'女');insert Student(Sid,Sname,Sage,Ssex) values (1012,'太平公主',62,'女');insert Student(Sid,Sname,Sage,Ssex) values (1013,'杨玉环',82,'女');insert Student(Sid,Sname,Sage,Ssex) values (1014,'司马相如',32,'男');

(插入知识点:插入数据的方式



insert [into] 表名 [(字段名1,字段名2,....)] values (值表达式1,值表达式2,....), (.....), ....;
replace [into] 表名 [(字段名1,字段名2,....)] values (值表达式1,值表达式2,....), (.....), ....;
insert [into] 表名 [(字段名1,字段名2,....)] select 字段名1,字段名2,.... from 其他表名;
insert [into] 表名 set 字段名1=值表达式1,字段名2=值表达式2,....;




4.表的字段定义。

格式:

字段名   字段类型   【字段附加属性列表】


说明:

1,字段名,就是自定义的名字,可以用常见的命名规则命名;名字可以使用反撇号( ` )引起来。

2,字段类型,就是之前所学的数据类型,比如:int, tinyint,float,double,decimal,char,varchar。

注意:某些类型,还可以或必须加附加的类型设定,比如varchar(20),decimal(15, 2),

3,字段的附加属性可能有多个,是根据字段本身的需要来设定,相互之间用空格隔开,主要有:


l  primary  key: 用于设定主键,使该表的每一行都可以据这个字段的值来相互区分(唯一确定);

l  通常,每个表,都需要(必须)设定主键,而,每个表,也只能有一个主键;

l  unique  key:用于设定该字段的值,在这个表中,不可以重复(即是唯一的);

l  auto_increment:用于设定一个字段的值会(可以)自动增长,但其值适用于整数类型,而且,它设定后,还必须同时设定在字段为一个“key”(biru:priamry  key或unique  key)

l  not  null: 用于设定一个字段的值不能为空值(null)——如果不设定,则就是可为空值;

l  default  XX值:用于设定某个字段的值,在插入数据的时候如果没有给值,就使用该默认值;

l  comment  ‘说明文字’:就是一个说明字段含义的文字,但其并不是注释;



5.表的选项设定


表选项,就是设定一个表的“特性特征信息”,可以有多项,相互之间用逗号隔开。

 

主要有如下几个方面:

 

1,charset  字符编码名:

用于设定该表的文本类型的字段所存储的文本内容所使用的编码名称;比如:

charset  utf8

charset  gbk


2,collate  排序规则名:

用于设定该表的文本类型的字段所存储的文本内容的排序规则名称;通常不设定,而是使用相应字符编码的对应默认排序规则;

 

3,auto_increment = XXX:

用于设定该表的自增长字段的起始数据值,默认是1,比如:

create  table  tab1 ( id int   auto_increment  primary key ) auto_increment=100;

则此时,该表第一次插入数据时,id的值自动获取时会使用100,而不是最初的默认1.


4,comment  ‘表说明文字’:


5,engine  = 表的存储引擎名称:



这两个怎么理解呢?

create table tablename (id int 字段含义)表的设定;



通俗点说,字段含义是对表中各个字段定义,而选项设定是在字段定义完后对整个表进行定义。