列值自增,可以有效的组织和管理存储在数据库

一、基本概念

启动MySQL服务

$ sudo service mysql start
或者
/etc/init.d/mysql start

目录

                          实体完整性约束
  约束种类                                      功能描述
  PRIMARY KEY(主键)约束                         唯一识别每一条记录的标志,可以有多列共同组成
  IDENTITY(自增)约束                            列值自增,一般使用此属性设置的列作为主键
  UNIQUE(唯一)约束                              可以使用UNIQUE约束确保在非主键列中不存在重复值,但列值可以是NULL(空)
  
  
                     域完整性约束
  CHECK(检查)约束                                用于限制列中值得范围
  FOREIGN KEY(外键)                              一个表中的FORENIGN KEY 指向另一个表中的PRIMARY KEY
  DEFAULT(默认值)约束                            用于向列中插入默认值
  NOT NULL(非空)约束                             用于强制列不接受NULL(空)值
  
  
  
注意:
1、PRIMARY KEY用于将表中的某类设置为主键,一张表中只有一个主键,主键可以是一列或由多列组成。
2、NOT NULL是对列值进行限制,即在表中添加数据时不允许有NULL值。
3、CHECK约束的语法规则:CHECK(表达式)
外键的使用:字段名 数据类型 [FOREIGN KEY] REFERENCES 表名(字段名)
  
向数据库中添加值:
语法:INSERT [INTO] table_name [(COLUMN1,COLUMN2,.....)] VALUES (VALUE1,VALUE2,.....)
注意:
1、VALUES需要与COLUMN对应
2、添加数据时,如果字段类型为varchar或datetime,否则必须使用单引号('')引起来。
3、虽然没有显示地添加IDENTIRY约束字段,但是数据库会自动按照IDENTITY规则添加数据

数据库和表的增删改

  1.数据库:

  数据库(DataBase)就是一个存储数据的仓库,为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。数据库是数据管理软件。数据存储分为三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。

使用root用户登陆

$ mysql -u 用户名 -p

-p表示使用密码登录

      • 启动MySQL服务
      • 使用root用户登陆
      • 查看命令帮助信息
      • 查看授予用户的安全权限
      • 注释
      • 取消正在输入的命令
      • 查看当前含有哪些数据库
      • 连接数据库
      • 查看当前数据库中含有哪些表
      • 显示表属性
      • 显示服务器警告或错误信息
      • 退出数据库
      • 新建数据库
      • 新建数据表
      • 数据类型
        • CHAR和VARCHAR的区别
        • ENUM和SET的区别
      • 插入数据
      • SQL约束
        • 主键
        • 外键
        • 非空约束
        • 默认值约束
        • 唯一约束
      • MySQL通配符
      • MySQL查询语句关键字顺序
      • SELECT操作
        • 查看表中所有的内容
        • SELECT基本格式
        • 对查询结果排序
        • 去除重复值
        • 限制返回结果数
        • 内置函数和计算
        • 子查询
        • 连接查询
      • 删除数据库
      • 重命名数据表
      • 删除数据表
      • 在表中增加列
      • 删除列
      • 修改列
      • 修改数据类型
      • 修改表中某个值
      • 删除某行记录
      • 为某列建立索引
      • 显示某表的索引
      • 创建视图一种虚拟存在的表
      • 导入将文件中的数据保存进表
      • 导出将表中数据保存到文件中
      • 备份整个数据库
      • 备份整个表
      • 恢复数据库
      • 正则表达式
      • 空白元字符
      • 字符类预定义字符集
      • 匹配多个实例
      • 定位元字符
      • 拼接字段
      • 别名alias
      • MySQL算数操作符
      • SELECT测试
      • SQL函数
      • 常用的文本处理函数
      • 日期和时间处理函数
      • 数值处理函数
      • SQL聚集函数
      • 分组数据
        • WHERE 和 HAVING
        • GROUP BY 和 ORDER BY
      • SELECT子句顺序
      • 子查询

一次添加多行数据
语法:
INSERT [INTO] tabale_name([COLUMN1,COLUMN2,.....])
SELECT VALUE UNION
SELECT VALUE

创建数据库

CREATE  DATABASE 数据库名;

# mysql中还可使用如下语句
CREATE SCHEMA 数据库名;

  2.数据库范式:

  数据库范式即数据库应该遵循的规则。目前关系数据库最常用的四种范式分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCN范式(BCNF)。

  第一范式:无重复的域。即数据库表的每一列都是不可分割的原子数据项,而不是集合、数组、记录等非原子数据项。

  第二范式:数据库表中的所有列都必须依赖于主键,这意味着一个表只描述一件事情。

  第三范式:表中的每一列只与主键直接相关而不是间接相关。

  BCN范式:Boyce-Codd,不允许出现有主键的一部分被主键另一部分或者其他部分决定。即一个表中只能有一个主键。

  举例(摘自其他博客)说明BCN:

  假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

    (仓库ID, 存储物品ID) →(管理员ID, 数量)

    (管理员ID, 存储物品ID) → (仓库ID, 数量)

  所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

    (仓库ID) → (管理员ID)

    (管理员ID) → (仓库ID)

  即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。

查看命令帮助信息

mysql> HELP 命令名;

启动MySQL服务

$ sudo service mysql start

删除表中的数据
语法:DELECT FROM table_name[WHERE <表达式>]
注意:
1、使用DELETE语句删除数据时,是以整条记录为单位的,不能只删除某个字段
删除整张表数据
语法:TRUNCATE TABLE table_name
                                  
           两种删除语句的优缺点
   语句                     优点                                        缺点
   DELETE                   选择性地删除,数据可恢复                    当删除整张表的数据时效率低
   TRUNCATE                 只能删除整张表的数据,但是效率高于          不能选择性地删除,数据可恢复
                            DELETE语句

数据库选择

USE 数据库名;

  3.数据库系统和数据库管理系统:

  数据库系统由数据库、数据库管理系统、应用开发工具构成。

  数据库管理系统(DataBase Management System, DBMS)是用来定义、管理和维护数据的软件。它是数据库系统的重要组成部分。数据库管理系统通过SQL语言来管理数据库中的数据。

查看授予用户的安全权限

mysql> SHOW GRANTS;

使用root用户登陆

$ mysql -u 用户名 -p

-p表示使用密码登录

修改表中的数据
语法:UPDATE table_name SET COLUMN1={},COLUMN2={},.... WHERE<表达式>

创建表

create table students
(
    id int unsigned not null auto_increment primary key,
    name char(8) not null,
    sex char(4) not null,
    age tinyint unsigned not null,
    tel char(13) null default "-"
);

  4.SQL语言:

  SQL(Structured Query Language)语言的全称是结构化查询语言。它包括:

    - 数据库定义语言(Data Definition Language, DDL)

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

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

注释

-- 单行注释
/* 多行注释 */

查看命令帮助信息

mysql> HELP 命令名;

注意:分离数据库是将数据库文件从SQL Server中分离出来,而删除数据库是将数据库文件删除。

重命名表名

RENAME TABLE 旧表名 TO 新表名;

  5.MySQL数据库版本和优势:

取消正在输入的命令

c

查看授予用户的安全权限

mysql> SHOW GRANTS;

查询语句语法结构
语法:SELECT <COLUMN1,COLUMN2,.....> FROM <table_name> [表达式] [ORDER BY <COLUMN1,COLUMN2,.....> [ASC或DESC]]
ORDER BY 子句用于对查询结果进行排序。ASC表示升序,DESC表示降序排列,默认的排序是ASC.
注意:将查询得到的结果称为结果集(RecordSet).SQL Server对大小写不敏感,包括关键字在内。例如,SELECT、select和Select是等效的。

删除数据库和表

DROP DATABASE 数据库名;
DROP TABLE 表名;

  常见数据库

  商业数据库:甲骨文的Oracle、IBM的DB2、微软的Access和SQL Server。开源数据库:PostgreSQL、MySQL。

查看当前含有哪些数据库

mysql> SHOW DATABASES;

注释

-- 单行注释

/* 多行注释 */

使用别名
1、语法:SELECT 字段名1 别名,字段名2 别名 FROM 表名
2、语法:SELECT 别名=字段名1,别名=字段名2 FROM
3、语法:SELECT 字段名1 AS 别名,字段名2 AS 别名 FROM 表名
注意:使用“=”更改查询结果列名时比较特殊,在SELECT语句中语法必须是“别名=字段名”;

插入和更新数据

  版本分类

  根据操作系统:Windows版,UNIX版,Linux版,MacOS版;根据开发情况:Alpha、Beta、Gamma与Available(GA)。

  alpha 暗示这是一个以展示新特性为目的的版本,存在比较多的不稳定因素,还会向代码中添加新新特性

  beta 以后的beta版、发布版或产品发布中,所有API、外部可视结构和SQL命令列均不再更改,不再向代码中添加影响代码稳定性的新特性。Gamma比Beta版更高级。

  GA如果没有后缀,则暗示这是一个大多数情况下可用版本或者是产品版本。. GA releases则是稳定版。

  优势:MySQL开放源码、跨平台性、价格优势、功能强大且使用方便。

连接数据库

mysql> USE 数据库名

取消正在输入的命令

c

单列排序:SELECT * FROM table_name ORDER BY
多列排序;SELECT * FROM table_name ORDER BY COLUMN1 DESC,COLUMN2 DESC....

使用INSERT插入行

INSERT INTO Customer
VALUES(NULL,
'100 Main Street',
'Los Angles',
'CA');

插入一个新客户到customers表。存储到每个表列中的数据在VALUES子句中给出,对每个列必须提供一个值。虽然这种语法很简单,但并不安全,应该尽量避免使用。
更安全的写法:

INSERT INTO Customer(cust_name,
    cust_address,
    cust_city,
    cust_state)
VALUES('Pep E',
    '100 Main Street',
    'Los Angeles',
    'CA');

这种写法即使表的结构改变,此INSERT语句仍然能正确工作。

  Linux安装MySQL

  

查看当前数据库中含有哪些表

mysql> SHOW TABLES;

mysql> DESCRIBE 表名;

查看当前含有哪些数据库

mysql> SHOW DATABASES;

查询限定行TOP N
语法:SELECT TOP N <COLUMN1,COLUMN2,.....> FROM <table_name> [WHERE <表达式>] [ORDER BY <COLUMN1,COLUMN2,.....> [ASC或DESC]]
查询百分比
语法:SELECT TOP N PERCENT <COLUMN1,COLUMN2,.....> FROM <table_name> [WHERE <表达式>] [ORDER BY <COLUMN1,COLUMN2,.....> [ASC或DESC]]

使用UPDATA更新数据

UPDATA Customers
SET cust_email = 'elmer@fudd.com'
WHERE cust id = 10005;

二、MySQL数据类型(摘自菜鸟教程:

  MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

显示表属性

mysql> SHOW COLUMNS FROM 表名;

该命令将会输出指定表的每个字段的字段名、数据类型、非空约束、是否是主键和默认值等信息。

连接数据库

mysql> USE 数据库名

条件查询注意:
1、在一个WHERE子句中,可以同时使用多个AND运算符链接多个查询条件。
2、在“(表达式1)OR(表达式2)”中,如果表达式1为TRUE,将不再执行表达式2。

使用IGNORE忽略错误

如果用UPDATE语句更新多行,并且在更新这些行中的一行或多行时出一个现错误,则整个UPDATE操作被取消。为即使是发生错误,也继续进行更新,可使用IGNORE关键字:

UPDATE IGNORE customers...

  1.整数类型的存储和范围

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

显示服务器警告或错误信息

mysql> SHOW ERRORS;

mysql> SHOW WARNINGS;

查看当前数据库中含有哪些表

mysql> SHOW TABLES;

mysql> DESCRIBE 表名;

 

使用DELETE删除数据

WHERE FROM customers
WHERE cust_id = 10006;

如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,但速度更快(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。

  2.日期和时间类型

类型 大小 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4

1970-01-01 00:00:00/2038

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS 混合日期和时间值,时间戳

退出数据库

mysql> EXIT/QUIT;

显示表属性

mysql> SHOW COLUMNS FROM 表名;

该命令将会输出指定表的每个字段的字段名、数据类型、非空约束、是否是主键和默认值等信息。

SQL Server内置函数(内置函数可作为where条件,聚合函数不能做为where条件)

表的查询

  3.字符串类型

类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65 535字节 长文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
TINYBLOB  0-255字节  不超过 255 个字符的二进制字符串
BLOB 0-65 535字节 二进制形式的长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据

新建数据库

mysql> CREATE DATABASE 数据库名;

通常SQL语句不区分大小写,但建议将关键字大写,变量和数据小写。

显示服务器警告或错误信息

mysql> SHOW ERRORS;

mysql> SHOW WARNINGS;

                                      字符串函数
  函数名                       示例                                          函数功能
  CharIndex                  CharIndex('ab','cdab')结果返回3                 返回‘ab’在‘cdab’中的位置,将返回第一个字母的位置
  Len                        Len('adc')结果返回3                             返回字符串的长度
   Upper                      Upper('abc')结果ABC                             将字符串中的小写字母转换为大写
  Ltrim                      Ltrim('  adc')结果返回adc                       清楚左边空格
  Rtrim                      Rtrim('abc  ')结果返回abc                       清除右边空格
  Replace                    Replace('abb','b','z')结果返回azz               替换指定的字符
  Stuff                      Stuff('abcd',1,2,'mm')结果返回mmcd              替换指定范围的字符
  substring                  substring('abc','2','2')结果返回bc              从指定位置截取
  
实例:测试字符串长度SELECT Len(字段名) FROM table_name
将内置函数作为条件使用:SELECT * FROM table_name WHERE  Len(字段名)>VALUE

查询列

SELECT 列名 FROM 表名;

三、MySQL表操作

新建数据表

mysql> CREATE TABLE 数据表名
    -> (
    -> 列名1 数据类型(数据长度) PRIMARY KEY,        --主键
    -> 列名2 数据类型(数据长度) NOT NULL,        --非空约束
    -> 列名3 数据类型(数据长度) DEFAULT '默认值',        --默认值约束
    -> UNIQUE(列名a),        --唯一约束
    -> CONSTRAINT 主键名 PRIMARY KEY (列名a,列名b,...),        --复合主键
    -> CONSTRAINT 外键名 FOREIGN KEY (列名) REFERENCES 表名(主键名)        --外键
    -> );

注意最后一个列名后面不加逗号”,”。

退出数据库

mysql> EXIT/QUIT;

                                    日期函数
        函数名                  示例                                                  函数功能
        GetDate                 GetDate结果返回“当前日期”                             返回当前日期
        DateAdd                 DateAdd(mm,2,'2009-10-08')结果返回‘2009-12-08’        向日期指定部分添加数字,其中,yy表示年、mm表示月、dd表示日
  DateDiff                DateDiff(dd,'2009-09-09','2010-09-09')结果返回‘365’   返回两个日期之间的间隔,其中,yy表示年、mm表示月、dd表示日
  DateName                DateName(DW,'2009-09-09')结果返回“星期三”             以字符串的形式返回某个日期指定的部分
  DatePart                DatePart(DW,'2009-09-09')结果返回“4”                  以整数形式返回某个日期指定的部分
  
实例:获取系统当前日期函数为GetDate(),表达式可以写为“COLUMN1<GetDate()”,SQL语句如下:
SELECT * FROM table_name WHERE COLUMN1<GetDate()

查询列中不重复项DISTINCT

SELECT DISTINCT 列名 FROM 表名;

  1.插入数据 INSERT INTO

-- 插入一条新的数据
/* INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email) VALUES('10006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL); */
-- 按表列字段的顺序插入数据时,列字段可省略
INSERT INTO customers VALUES('10006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL);
-- 将一张表插入到原来的表
/* INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)  SELECT cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email FROM cust_new WHERE cust_id NOT IN (SELECT cust_id FROM customers); */
-- 复制表
CREATE TABLE custcopy AS SELECT * FROM customers;

  注意:

  - 任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY。

  - 可以联结多个表执行插入数据操作。

  - 不管从多少个表中检索数据,数据都只能插入到单个表中。

数据类型

数据类型 大小(字节) 用途 格式
INT 4 整数 -
FLOAT 4 单精度浮点数 -
DOUBLE 4 双精度浮点数 -
ENUM - 单选 ENUM(‘a’,’b’,’c’)
SET - 多选 SET(‘1’,’2’,’3’)
DATE 3 日期 YYYY-MM-DD
TIME 3 时间点或持续时间 HH:MM:SS
YEAR 1 年份值 YYYY
CHAR 0~255 定长字符串 -
VARCHAR 0~255 变长字符串 -
TEXT 0~65535 长文本数据 -

新建数据库

mysql> CREATE DATABASE 数据库名;

通常SQL语句不区分大小写,但建议将关键字大写,变量和数据小写。

判断选课时间是否是星期三的函数为DateName(DW,COLUMN),表达式可以写成“DateName(DW,COLUMN)=‘星期三’”,SQL语句如下:
SELECT * FROM table_name DateName(DW,COLUMN)=‘星期三’

限制结果数量LIMIT

SELECT 列名 FROM 表名 LIMIT 数量;

本文由必威发布于必威-数据,转载请注明出处:列值自增,可以有效的组织和管理存储在数据库

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。