【SQL】(基础篇):SQL语言、基本操作、创建表、索引

【介绍】数据库与数据库管理系统
  • 数据库:
    【概述】:数据库提供 了一个存储空间用来存储各种数据,可以将数据库视为一个 存储数据的容器。
  • 数据库管理系统:

专门用于创建和管理数据库的一套 软件, 介于应用程序和操作系统之间,如 MySQL、 Oracle、 SQL Server、 DB2等。结构图如下所示。

数据库系统架构图


关于SQL语言

SQL( Structured Query Language) 是 一种数据库查询语言和程序设计语言,主要用于管理数据库中的数据,如存取数据、查询 数据、更新 数据等。
由以下四种语言构成:

  • (1) 数据定义语言( Data Definition Language, DDL)

【用于】数据库定义语言主要用于定义数据库、表等。

【例如】CREATE、ALTER、DROP

  • (2) 数据操作语言( Data Manipulation Language, DML)

【用于】数据操作语言 主要用于对数据库进行添加、修改和删除操作。

【例如】INSERT、UPDATE、DELETE

  • (3)数据查询语言( Data Query Language, DQL)

【用于】数据查询语言主要用于查询数据;

【例如】SELECT

  • (4) 数据控制语言( Data Control Language, DCL)

【用于】数据控制语言主要用于控制用的访问权限。

【例如】GRANT、COMMIT、ROLLBACK


【注释一下】SQL 对大小写不敏感!

【编程-好习惯】分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句。

如果使用的是 MS Access 和 SQL Server 2000,则不必在每条 SQL 语句之后使用分号,不过某些数据库软件要求必须使用分号。(最好还是写上)


  • mysql -uroot -p :连接到mysql

  • \s :查看数据库信息

  • set character_ set_ client = gbk:
    设置数据库编码集(这种方式只能对当前窗口有效);【永久修改】:在my.ini中配置。


数据库和表的基本操作

(1).创建数据库

  • 【格式】:create database 数据库名称
  • 【格式】:create database user;

(2).查看数据库

  • 【格式】:show databases;

(3).查看某个数据库的创建信息

  • 【格式】:show create database 数据库名称
  • 【格式】:show create database users;

(4).修改数据库

  • 【格式】:alter database 数据库名 default character set 编码方式 collate 编码方式_bin

(5).删除数据库

  • 【格式】:drop database 数据库名称

SQL 可以分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)

(结构化查询语言 (SQL)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

    SELECT - 从数据库表中获取数据
    UPDATE - 更新数据库表中的数据
    DELETE - 从数据库表中删除数据
    INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

    CREATE DATABASE - 创建新数据库
    ALTER DATABASE - 修改数据库
    CREATE TABLE - 创建新表
    ALTER TABLE - 变更(改变)数据库表
    DROP TABLE - 删除表
    CREATE INDEX - 创建索引(搜索键)
    DROP INDEX - 删除索引

实例:

MariaDB [db_student_msg]> show tables;
+--------------------------+
| Tables_in_db_student_msg |
+--------------------------+
| tb_class                 |
| tb_score                 |
| tb_student               |
| tb_subject               |
+--------------------------+
4 rows in set (0.00 sec)

MariaDB [db_student_msg]> desc tb_student;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_no    | char(8)     | NO   | PRI | NULL    |       |
| stu_name  | varchar(30) | NO   |     | NULL    |       |
| gender    | tinyint(1)  | NO   |     | NULL    |       |
| brith_day | datetime    | YES  |     | NULL    |       |
| class_no  | int(11)     | NO   | MUL | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
MariaDB [db_student_msg]> desc tb_score;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| stu_no     | char(8) | NO   | PRI | NULL    |       |
| subject_no | int(11) | NO   | PRI | NULL    |       |
| score      | double  | YES  |     | 0       |       |
+------------+---------+------+-----+---------+-------+

数据类型

mysql 提供了多种数据类型,包括:整数、浮点数、定点数、日期和时间、字符串和二进制类型。(这里就不详细阐述了...)

数据类型 存储范围 数据类型 存储范围
TINYNLOB 1~255字节 MEDIUMBLOB 0~16777215字节
BLOB 0~65535字节 LONGBLOB 0~4294967295字节

创建数据表
 【格式】:CREATE TABLE 表 名 (
字段 名 1   数据 类型[ 完整性 约束 条件],
字段 名 2   数据 类型[ 完整性 约束 条件],
...
字段 名 n, 数据 类型[ 完整性 约束 条件]
)
  • 查看数据表:show create table 表名;

  • 查看表的字段信息:DESC 表名;

修改数据表
  • 1) 修改表名

【格式】:alter table 旧表名 rename [to] 新表名

  • 2)修改字段名

【格式】:alter table 表名 change 旧字段名 新字段名 新字段类型

 ALTER TABLE grade CHANGE name username VARCHAR( 20);
  • (3)修改字段的数据类型

【格式】:alter table 表名 modify 字段名 数据类型;

  • (4)添加字段

【格式】:alter table 表名 add 新字段 数据类型[约束条件] [first|after 已存在的字段名]

  • (5) 删除字段

【格式】:alter table 表名 drop 字段名

  • (6)修改字段的排列位置

【格式】:alter table 表名 modify 字段名1 数据类型 first | after 字段2

  • (7)删除数据表

【格式】:drop table 表名


关于表的约束

为了防止向数据库中插入错误的数据,在mysql中定义了一些约束规则。


表的约束

(1).【主键】:通过primary key 来定义,唯一且非空;

  • 单字段主键:
    • 【格式】:字段名 数据类型 primary key;
      CREATE TABLE example01( id INT PRIMARY KEY, name VARCHAR( 20), grade FLOAT);
  • 多字段主键
    由多个字段组合而成的主键
    • 【格式】:PRIMARY KEY (字段 名 1,…, 字段 名 n)

(2).【 非空约束】

  • 字段值不能为NULL;
  • 【格式】:字段 名 数据 类型 NOT NULL;

(3).【唯一约束】

  • 【作用】:保证字段的唯一性;
  • 【格式】:字段 名 数据 类型 UNIQUE;

(4).【默认约束】

  • 【提示】:插入数据时,如果字段没有被赋值,则给该字段一个默认值;
  • 【格式】:字段 名 数据 类型 DEFAULT 默认值;

关于表中字段的自动增加
  • 【目的】:为了给新插入的字段一个唯一的ID
  • 【格式】:字段名 数据类型 AUTO_ INCREMENT;
例如:
CREATE TABLE example05( id INT PRIMARY KEY AUTO_ INCREMENT, stu_ id INT UNIQUE, grade FLOAT );

索引

【解释】:索引就好像一本书的目录,用于快速检索数据。
索引分类:普通索引、唯一索引、全文索引。

  • 普通索引
    【解释】:由KEY 或 INDEX 定义。是基本的索引类型,可以用于任何数据类型 。其值是否唯一或为空由字段本身约束决定

  • 唯一索引
    【解释】:由Unique 定义的索引,该索引的字段值必须唯一。

  • 全文索引
    【解释】:只能创建在char、varchar、text字段类型上。只有MyISAM引擎支持。

【提高】:索引也可创建在多列上。


创建索引

在创建表的时候,如果创建索引,结构如下:

 CREATE TABLE 表 名(

字段名 数据类型[ 完整性 约束 条件],

字段名 数据类型[ 完整性 约束 条件], …

字段名 数据类型 [UNIQUE| FULLTEXT| SPATIAL] INDEX| KEY [别名] (字段 名 1 [(长度)]) [ASC|DESC]));

【解释一下】

  • 【别名】:索引的名称;
  • 【字段名1】:指定索引字段名称;
  • 【长度】:表示索引的长度;
  • 【ASC|DESC】: 索引的顺序;
分类探讨创建索引
  • 1)创建普通索引

【格式】:CREATE TABLE t1( id INT, name VARCHAR( 20), score FLOAT,name VARCHAR( 20), score FLOAT, INDEX (id) );

  • 2)创建唯一索引

【格式】:CREATE TABLE t2( id INT NOT NULL, name VARCHAR( 20) NOT NULL, score FLOAT, UNIQUE INDEX unique_ id( id ASC) );

  • 3)创建多列索引

【格式】:CREATE TABLE t5( id INT NOT NULL, name VARCHAR( 20) NOT NULL,score FLOAT, INDEX multi( id, name( 20)) );


删除索引
  • 直接操作

【结构】:ALTER TABLE 表名 DROP INDEX 索引;

  • 使用 DROP INDEX 删除 索引

【结构】:DROP INDEX 索引 名 ON 表 名;


【重点】添加、更新、删除数据
添加数据
  • 指定字段添加数据

【结构】:INSERT INTO 表 名( 字段 名 1, 字段 名 2,…) VALUES( 值 1, 值 2,…);

  • 不指定字段名的insert

【结构】:INSERT INTO 表 名 VALUES( 值 1, 值 2,…);

  • 同时插入多条数据

【结构】:INSERT INTO 表 名[( 字段 名 1, 字段 名 2,…) ] VALUES( 值 1, 值 2,…),( 值 1, 值 2,…), … (值 1, 值 2,…);

更新数据

【结构】:UPDATE 表 名 SET 字段 名 1= 值 1[, 字段 名 2 = 值 2,…] [WHERE 条件 表达式]

删除数据
  • 【结构】:DELETE FROM 表 名 [WHERE 条件 表达式];

  • 【结构】:TRUNCATE [TABLE] 表 名;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343