建议:关键字和函数名全部大写;数据库名称、表名称、字段名称全部小写;分号结尾。但是大小写语句不区分,本人讨厌大写(英语菜,不能一眼看出内容),所以全部小写。[]看情况可有可无,{}花括号的内容必须要有,|左右内容表示选其中一个


一、小知识点

1.MySQL端口号:3306

2.超级用户:root

3.退出命令:mysql>exit; mysql>quit; mysql>\q;

4.提示符,黑窗口输入命令前的提示,mysql>就是一个提示符

\D完整日期 \d当前数据库 \h服务器名称 \u当前用户

修改提示符的命令语句:

prompt+空格+修改成的内容

例如:mysql>prompt \u@\h;

提示:PROMPT set to '\u@\h'

新的提示符:root@localhost (表示用户名为root,服务器名为localhost)

5.显示当前版本号:select version();显示当前时间:select now();显示用户:select user();


二、对数据库进行操作

1.查看当前服务器下的数据库:

show { databases | schemas };

其中几个数据库是自带的,information_schema、mysql、performance_schema、test这4个数据库是自带的

2.创建数据库

CREATE { DATABASE | SCHEMA } [ IF NOT EXISTS ] db_name [ DEFAULT ] CHARACTER SET [ = ] charset_name

例如创建数据库test02语句:create databases test02;如果已存在名为test02的数据库,则错误,如果加上中括号的[ IF NOT EXISTS ]则只是警告。

show warnings;--查看警告信息

3.[ DEFAULT ]后面的character是指定字符编码方式,比如utf8之类的东西,创建数据库时没写则是默认数据库的编码方式,创建时可以指定其他类型的编码方式,也可以修改,也可以查看数据库的编码方式。举例:

show create database test02;--查看编码方式
create database if not exists test03 character set = gbk;--创建时即指定其他编码方式
alter database test03 character set = utf8; --创建后修改编码方式,等号可以不写,修改则把create换成alter

MySQL 5.0 以上的版本:一个汉字占多少字节与编码方式有关,utf8占3个字节,gbk占2个字节。

select length(col_name) from table_name;--查看表中的列的值占了多少字节

4.删除数据库

DROP { DATABASE | SCHEMA } [ IF EXISTS ] db_name;
drop schema if exists test03;
drop database test02;

5.进入数据库以及查看当前数据库

use db_name;--进入
select database();--查看当前进入哪个数据库

三、数据类型

1.整型

m一般省略,如果表示无符号,在数据类型后面加上unsigned,取值从0开始,最大值翻倍。

2.浮点型

float[ (m,d) ] 4 个字节,double[ (m,d) ] 8 个字节;

m是数字总位数,d是小数点后面的位数,如果被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位。

3.字符型

char和varchar:

  • char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
  • char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
  • char类型的字符串检索速度要比varchar类型的快。

varchar和text:

  • varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节
  • text类型不能有默认值
  • varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用

4.日期时间型

5.数据类型的属性和约束(加在数据类型后面)

  • unsigned:无符号,值从0开始,无负数
  • zerofill:零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加unsigned
  • not null:非空约束,表示该字段的值不能为空
  • default:表示如果插入数据时没有给该字段赋值,那么就使用默认值
  • primary key:主键约束,表示唯一标识,不能为空,且一个表只能有一个主键。一般都是用来约束id
  • auto_increment:自增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1;如果非默认值,每次按最大值的标准+1
  • unique key:唯一性约束,表示该字段下的值不能重复,null除外。比如身份证号是一人一号的,一般都会用这个进行约束。保证记录的唯一性,每张表可以有多个唯一约束
  • foreign key:外键约束,保证数据的完成性和唯一性,以及实现一对一或一对多关系,体现关系型数据库。

列级约束,对一个数据列建立约束;表级约束,对多个数据列建立约束。


四、对表的操作

1.建表 create

CREATE TABLE [ IF NOT EXISTS ] table_name (
column_name1 data_type,
column_name2 data_type,

)

举例:建一个学生表,包含属性:id,name,age,sex;

Create table if not exists student(
id int unsigned not null auto_increment primary key,
name varchar(20) not null unique key,
age tinyint unsigned not null default 20,
sex enum(‘1’,’2’) default 1 --sex的值只能在1和2里面选,不指定则默认选1
)

2.查看表中各列的情况,即表的结构 show

SHOW COLUMNS FROM table_name;

3.从数据库的视野查看表 show

SHOW TABLES [ FROM db_name ];
--前半句查看当前数据库下的表,加上后半句可以查看其他数据库下的表
--查看其他数据库下的表不会更改当前进入的数据库位置。

4.删除表 drop

DROP TABLE table_name;

5.向表中插入记录 insert

INSERT [ INTO ] table_name [ (col_name1,col_name2…) ] VALUES( val1,val2,…);--单条记录
INSERT [ INTO ] table_name [ (col_name1,col_name2…) ] VALUES( val1,val2,…),( val1,val2,…);--可以插入多条记录

举例插入3条数据,不同数据库虽然SQL语句类似但有所不同,例如Oracle的插入语句into不能省,平时使用尽量写全。

insert into student (id,name,age,sex) values(10086,’守林鸟’,21,2);
insert student values(default,’霸王别鸡’,22,default);
insert student values(default,’灰太狼’,22,null);
insert student values(default,’东方不败’,default,1);

6.建表后添加列并指定位置  alter,add

ALTER TABLE table_name ADD [ COLUMN ] col_name column_definition [ FIRST | AFTER col_name ]; --添加单列
ALTER TABLE table_name ADD [ COLUMN ] col_name column_definition, ADD [ COLUMN ] col_name column definition,…;---添加多列

例如添加class列于age列后面,再添加teacher列在最前面

alter table student add class int unsigned not null after age;
alter table student add teacher varchar(20) not null default ‘ACMer’ first;--单列添加两次
alter table student add class int unsigned not null after age, add teacher varchar(20) not null default ‘ACMer’ first;--一次添加两列

7.建表后删除列 alter,drop

ALTER TABLE table_name DROP [ COLUMN ] col_name, DROP [ COLUMN ] col_name,…

例如删除刚刚添加的class和teacher列

alter table student drop column class, drop teacher; 

8.修改列的定义(修改字段的位置或者类型,转型可能有损失) alter,modify

Alter table table_name modify [column] col_name column_definition [ first|after col_name]:

例如将teacher列修改为varchar(30),默认值为'00',并置于sex后面;原本默认赋值的'ACMer'不会改变,依旧是‘ACMer’,修改后再添加记录teacher的默认值才是'00'

alter table student modify teacher varchar(30) not null default ‘00’ after sex;

9.修改列名 alter,change

ALTER TABLE table_name CHANGE [ COLUMN ] old_col_name new_col_name column_definition [ FIRST|AFTER col_name ];

例如将teacher列的名改成new_teacher并修改默认值为'陈老师',列的定义也要写,不可以只写新旧名

alter table student change teacher new_teacher varchar(20) not null default '陈老师';

10.修改表名 alter,rename

ALTER TABLE table_name RENAME [ TO|AS ] new_table_name;
RENAME TABLE table_name TO new_table_name [, table_name2 TO new_table_name2 ];--不可以用as

11.修改记录 update,set

Update table_name set col_name={expr1|default} [,col_name2={expr1|default} ]… [where where_condition];

where的条件语句是覆盖所有列的修改,而不是最后一个修改列。

update student set new_teacher='陈冯涛老师',sex=2 where age>=22;

12.单表删除记录 delete

delete from table_name [ where where_condition ];

假如删除id为10090的记录,id是主键,此时最大增长到10090,删除该记录后,再插入记录,则主键id默认值为10091;

delete from student where id=10090;
insert student values(default,'怡宝',18,1,1,'罗勇');


五、添加/删除/查看各种约束

1.删除主键约束

alter table table_name drop primary key;

如果主键还有自动增长的属性(修改列的定义),要先删除自动增长,再删除主键约束

alter table student modify id int not null;--去掉自动增长,但是作为主键的约束还在
alter table student drop primary key;--删除主键约束

2.添加主键约束

alter table table_name add [ constraint [symbol] ] primary key [ index_type ] ( index_col_name); --symbol表示约束名

为student表的id字段添加主键约束

alter table student add primary key(id);
alter table student add constraint pk_student primary key (id);

3.删除唯一约束

alter table table_name drop {index|key} index_name;
drop index index_name on table_name;

唯一约束也是索引,先用show index from table_name;找到索引的名字,再通过索引名删除,例如删除student表中的name字段的唯一约束

show index from student\G;--\G可有可无,是一种格式显示;找到约束名
alter table student drop index name;--恰好约束名就是name
show index from student\G;--再查看删除情况

4.添加唯一约束

alter table table_name add [ constraint [symbol] ] unique [index|key] [index_name] [ index_type ] ( index_col_name);

index_type是索引方式,暂不清楚,查看很多约束都是btree,应该是B树查找那类东西。再为student表的name字段添加唯一约束

alter table student add constraint unique key uk_student_name (name);

5.删除/修改/添加默认约束

Alter table table_name alter [column] col_name { set default literal | drop default }

先删除默认约束后再使用修改语句设置默认值即可以达到添加效果,另一种添加方法是直接添加列名并且设置属性及约束

alter table student alter teacher drop default;--先删除
alter table student alter teacher set default '袁大头';--再设置默认值达到添加效果

六、外键约束

Foreign key 保持数据一致性,完整性,实现1对1或者1对多的关系,体现关系型数据库

1.子表是指具有外键列的表,子表参照的表叫父表。父表和子表使用相同的存储引擎,禁止使用临时表。先有父表(记录)才有子表(记录)

2.存储引擎只能为INNODB(可以在my.ini文件中看到)

3.外键列(加foreign)和参照列必须具有相似的数据类型。数字长度或有无符号位必须相同;字符长度可以不同。

4.外键列和参照列必须创建索引。如果外键列不存在索引,自动创建。

show indexes from table_name [\G];--显示索引

SQL基础知识整理的更多相关文章

  1. 转,异常好的sql 基础知识整理

    转载自:http://blog.csdn.net/u011001084/article/details/51318434 最近从图书馆借了本介绍SQL的书,打算复习一下基本语法,记录一下笔记,整理一下 ...

  2. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  3. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  4. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  5. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  6. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  7. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  8. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  9. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

随机推荐

  1. hdu6492 暴力预处理 + 枚举

    http://acm.hdu.edu.cn/showproblem.php?pid=6492 题意 他们一共有 n+m+2k 个人,包括 n+k 个男生,m+k 个女生,其中 k 对男女生为异性情侣, ...

  2. MySQL实战45讲学习笔记:第三十一讲

    一.本节概览 今天我要和你讨论的是一个沉重的话题:误删数据. 在前面几篇文章中,我们介绍了 MySQL 的高可用架构.当然,传统的高可用架构是不能预防误删数据的,因为主库的一个 drop table ...

  3. Oracle 存储过程包(Package、Package Body)

    初出茅庐,不知原来存储过程还可以写得如此复杂,而且还竟然可以调试! 好吧,得整理一下存储过程的一些语法,以备以后用到时可以查阅. 使用数据库:Oracle 数据库工具:PL/SQL Developer ...

  4. 【08月14日】A股ROE最高排名

    个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名 兰州民百(SH600738) - ROE_TTM:86.45% - ...

  5. python免安装版(绿色版)制作

    一.实验环境 1.Windows7x64_SP1 二.需求背景 个人编写了一个软件安装器,用于一键安装开发软件及工具,该工具基于python + pywinauto. 但问题来了,新电脑上未安装pyt ...

  6. 我是如何理解并使用maven的

    前言 一直想写一篇关于Maven的文章,但是不知如何下笔,如果说能使用,会使用Maven的话,一.两个小时足矣,不需要搞懂各种概念.那么给大家来分享下我是如何理解并使用maven的. 什么是Maven ...

  7. ECMAScript 6.0 简要学习

    由于在学习vue的时候有许多自己不懂的语法,于是简单的学习一下ES6. 1.ES简介 ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版. ...

  8. 缘起 Dubbo ,讲讲 Spring XML Schema 扩展机制

    背景 在 Dubbo 中,可以使用 XML 配置相关信息,也可以用来引入服务或者导出服务.配置完成,启动工程,Spring 会读取配置文件,生成注入 相关 Bean.那 Dubbo 如何实现自定义 X ...

  9. 第五篇 openvslam建图与优化模块梳理

    建图模块 mapping_module在初始化系统的时候进行实例化,在构建实例的时候会实例化local_map_cleaner和local_bundle_adjuster.系统启动的时候会在另外一个线 ...

  10. select 获取option中其他的属性的值

    <select name="tag_keys[]" id="category_type" required> <option value=&q ...