一、数据库基本操作

1、创建数据库

SHOW DATABASES;  #查看当前存在的数据库
CREATE DATABASE test_db;  #创建数据库
SHOW CREATE DATABASE test_db;  #线束数据库的创建信息

 2、删除数据库

drop DATABASE test_db;  #删除数据库

 二、数据表的基本操作

1、创建数据表

USE test_db;  #指定操作在哪个数据库中进行
CREATE TABLE test   #创建表
 (
    ID INT (11),
    NAME VARCHAR (25),
    deptID INT (11),
    salary FLOAT
);
SHOW TABLES;  #展示数据库中表

 2、使用主键约束

主键能够唯一标识表中的一条记录,可以结合外键来定义不同数据表之间的关系。主键的数据唯一且不为空,主键可以是单字段,也可以是多字段联合。

CREATE TABLE test2  #创建表时指定主键,单字段做为主键
(
    ID INT (11) PRIMARY KEY,
    NAME VARCHAR (25),
    deptID INT (11),
    salary FLOAT
);
CREATE TABLE test3  #创建表时指定主键,多字段做为主键
 (
    ID INT ,
    NAME VARCHAR (25),
    deptID INT ,
    salary FLOAT ,
  PRIMARY KEY(ID, deptID)
);

3、使用外键约束

外键用来在两个表的数据之间建立连接,可以是一列或多列,可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

CREATE TABLE test3
 (
    ID INT ,
    NAME VARCHAR (25),
    deptID INT ,
    salary FLOAT ,
  CONSTRAINT id_deptid FOREIGN KEY (deptID)REFERENCES test2(ID)
);
#建立一个名为id_deptid的外键约束,外键为deptid,其依赖于表test2中的id

4、使用非空约束、唯一性约束、默认约束

CREATE TABLE test4
 (
    ID INT NOT NULL UNIQUE,   #非空且唯一
    NAME VARCHAR (25) NOT NULL,  #非空
    deptID INT DEFAULT 123,  #默认值为123,即若新插入的记录没有deptid则默认为123
    salary FLOAT NOT NULL  #非空 
);

5、设置表的属性值自动增加

 一个表只能有一个字段使用自动增加,且这个字段必须是主键的一部分。

CREATE TABLE test5
 (

  ID INT PRIMARY KEY auto_increment, #id字段会在添加记录时自动增加,默认自增字段id的值从1开始,每增加一条记录,自动加1
    NAME VARCHAR (25) NOT NULL,
    deptID INT DEFAULT 123,
    salary FLOAT NOT NULL
);

6、查看数据表结构

DESCRIBE test5;

7、查看表详细结构

SHOW CREATE TABLE test5;

结果:

 CREATE TABLE `test5` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(25) NOT NULL,
  `deptID` int(11) DEFAULT \’123\’,
  `salary` float NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

8、修改数据表

(1)修改表名

ALTER TABLE test5 RENAME re_test5;

(2)修改字段类型

ALTER TABLE re_test5 MODIFY name VARCHAR(30);

DESCRIBE re_test5; #查看表询信息

(3)增加字段

ALTER TABLE re_test5 add location VARCHAR(30);   #增加无完整性约束条件字段,字段名称location,类型varchar(30ALTER TABLE re_test5 add location VARCHAR(30) NOT NULL ;   #增加有完整性约束条件字段
ALTER TABLE re_test5 add var int(11) FIRST;           #在第一列添加一个字段
ALTER TABLE re_test5 add var2 int(11) AFTER name;     #在name字段后添加var2字段

 (4)修改字段名称

ALTER TABLE re_test5 CHANGE location  loc VARCHAR(50); #修改location为loc,数据类型改为varchar(50)

 如果只修改字段名称,不需要修改数据类型,则数据类型写为跟之前一样的数据类型,但不能为空。

(5)删除字段

ALTER TABLE re_test5 DROP loc;

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

DESCRIBE re_test5;  #查看表结构

ALTER TABLE re_test5 MODIFY ID int(11) FIRST;  #将id字段放在第一列
ALTER TABLE re_test5 MODIFY location VARCHAR(30) after name;  #将location字段放在name字段后面

DESCRIBE re_test5;   #查看表结构

 

(7)删除表的外键约束

ALTER TABLE test3 DROP FOREIGN KEY id_deptid;

 9、删除数据表

DROP TABLE if EXISTS test,test2;   #删除表test1,test2。if exists用于判断表是否存在,如果表不存在,语句可顺利执行,但会发出警告

 表之间存在外键关联的情况时,不能直接删除父表,可先删除子表,再删除父表;若想只删除父表,保留子表,则要将外键约束删除,再删除父表。

 

三、数据类型和运算符

mysql支持多种数据类型,主要要数值类型、日期/时间类型和字符串类型。

数值类型包括:整数类型TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT、浮点小数类型 FLOAT,DOUBLE、定点小数类型DECIMAL

日期/时间类型包括:YEAR,TIME,DATE,DATETIME,TIMESTAMP

字符串类型包括:CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,SET

1、整数类型

在创建表时,输入的 id int(11),后面的11表示的是该数据类型指定的显示宽度。显示宽度与数据类型的取值范围无关,显示宽度只是指明mysql最大可能显示的数字个数。当数值的位数小于指定宽度时会由空格填充,如果插入的值大于显示宽度,只要该值不超过该类型的取值范围,数值依然可以插入,也可以完整显示。如果不指定数值,则系统为每一种类型指定默认的宽度值。

2、浮点数类型和定点数类型

3、日期与时间类型

4、字符串类型

5、如何选择数据类型

(1)整数和浮点数

如果不需要小数位,则使用整数;反之则用浮点数,要求精度高时使用double。

(2)浮点数和定点数

由于浮点数容易产生误差,在精确度要求高时,用decimal,decimal在mysql中是以字符串存储的,用于定义货币等对精确度要求高的数据。

(3)日期和时间

只录入年份用year,只记录时间用time。同时记录日期和时间,用datetime或timestamp,timestamp的取值范围小于datetime,因此存储范围较大的日期最好使用datetime。

(4)char和carchar

两者的区别:char是固定长度的字符,varchar是可变长度的字符,char会自动删除数据尾部的空格,varchar不会。

char是固定长度,因此处理速度比varchar快,但浪费内存空间。若对速度有要求可使用char。

对于MyISAM引擎,最好使用char;InnoBD引擎,可使用varchar。

(5)enum和set

enum只能取单值,它的数据列表是一个枚举集合,合法取值列表最多允许有65535个成员。因此要从多个值中选一个时,使用enmu。

set可取多个值。它的合法取值列表最多允许有64个成员。在要取多个值时用set。

(6)blob和text

blob是二进制字符串,text是非二进制字符串。blob主要存储图片、音频等信息,text只能存储纯文本信息。

6、常见运算符介绍

(1)算数运算符

CREATE TABLE aa(num int);
INSERT into aa VALUE(66);
SELECT num,num+10,num*2,num%3 from aa;

(2)比较运算

  

SELECT 1=0,4>=2,ISNULL(10),5 BETWEEN 10 AND 15,GREATEST(5,2,9),3 in (1,2,3);

 

like语法:expr like 匹配条件

like运算符在进行匹配时,可以采用:

%,匹配任何数目的字符,包括零字符;

_,只能匹配一个字符。

SELECT \'d\'LIKE\'def\',\'ghlk\'LIKE\'gh_\',\'adjl\'LIKE\'%l\';

regexp语法:expr regexp 匹配条件

regexp运算符在进行匹配时,可以采用:

^,匹配以该字符后面的字符开头的字符串

$,匹配以该字符前面的字符结尾的字符串

. ,匹配任何一个单字符串

[…],匹配在方括号内的任何字符串,例如[a,b,c]匹配a,b,c。[a-z]匹配任何字母,[0-9]匹配任何数字。

*,匹配零个或多个在它前面的字符。例x*匹配任意数量的x字符,[0-9]*匹配任何数量的数字,.*匹配任何数量的任何字符。

SELECT \'aabbc\' REGEXP\'^a\',\'aabbc\'REGEXP\'c$\',\'aabbc\' REGEXP\'.\',\'asdfgh\' REGEXP \'[ah]\';

 

 (3)逻辑运算符

(4)位运算符

 

位或:将参与运算的两个数据,按对应的二进制数逐位进行逻辑或运算。

位与:将参与运算的两个数据,按对应的二进制数逐位进行逻辑与运算。

异或:将参与运算的两个数据,按对应的二进制数逐位进行逻辑y异或运算。

位左移:将制定的二进制值的所有位都左移指定的位数,左移之后,左边高位的数值将被移出丢弃,右边低位空出的位置用0补齐。语法为expr<<n,n为移动的位数。例1的二进制0000 0001,左移两位变成0000 0100,对应的是十进制4.。

位右移:方法同位左移。

位取反:将参与运算的数据,按对应的二进制数逐位反转。

(5)运算优先级

 

 

版权声明:本文为niniya原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/niniya/p/8857397.html