本节内容

数据库介绍

mysql 数据库安装使用

mysql管理

mysql 数据类型

常用mysql命令

创建数据库

外键

增删改查表

权限

事务

索引

python 操作mysql

ORM sqlachemy

1. 数据库介绍

1.1什么是数据库?

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

RDBMS即关系数据库管理系统(Relational Database Management System)的特点:

1) 数据以表格的形式出现

2) 每行为各种记录名称

3) 每列为记录名称所对应的数据域

4) 许多的行和列组成一张表单

5) 若干的表单组成database

1.2 RDBMS 术语

数据库: 数据库是一些关联表的集合。.

数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。

行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

冗余:存储两倍数据,冗余可以使系统速度更快。(表的规范化程度越高,表与表之间的关系就越多;查询时可能经常需要在多个表之间进行连接查询;而进行连接操作会降低查询速度。例如,学生的信息存储在student表中,院系信息存储在department表中。通过student表中的dept_id字段与department表建立关联关系。如果要查询一个学生所在系的名称,必须从student表中查找学生所在院系的编号(dept_id),然后根据这个编号去department查找系的名称。如果经常需要进行这个操作时,连接查询会浪费很多的时间。因此可以在student表中增加一个冗余字段dept_name,该字段用来存储学生所在院系的名称。这样就不用每次都进行连接操作了。)

主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

外键:外键用于关联两个表。

复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

1.3 Mysql数据库

Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

Mysql是开源的,所以你不需要支付额外的费用。

Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

MySQL使用标准的SQL数据语言形式。

Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。

Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。

MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。

Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

2.MySQL数据库的安装使用

2.1 Linux/UNIX上安装Mysql

使用root用户登陆你的Linux系统。

下载Mysql RPM包。

通过以下命令执行Mysql安装,rpm包为你下载的rpm包:

[root@host]# rpm -ivh MySQL-5.0.9-0.i386.rpm

以上安装mysql服务器的过程会创建mysql用户,并创建一个mysql配置文件my.cnf。可以在/usr/bin和/usr/sbin中找到所有与MySQL相关的二进制文件。所有数据表和数据库将在/var/lib/mysql目录中创建。

2.2 Window上安装Mysql

Windows上安装Mysql相对来说会较为简单,你只需要载 MySQL 下载中下载window版本的mysql安装包,并解压安装包。

双击 setup.exe 文件,你只需要安装默认的配置点击"next"即可,默认情况下安装信息会在C:\mysql目录中。接下来你可以通过"开始" =》在搜索框中输入 " cmd" 命令 =》 在命令提示符上切换到 C:\mysql\bin 目录,并输入一下命令:mysqld.exe --console

如果安装成功以上命令将输出一些mysql启动及InnoDB信息。

2.3验证Mysql安装

使用 mysqladmin 工具来获取服务器状态:

使用 mysqladmin 命令俩检查服务器的版本,在linux上该二进制文件位于 /usr/bin on linux

,在window上该二进制文件位于C:\mysql\bin 。

[root@host]# mysqladmin --version

linux上该命令将输出以下结果,该结果基于你的系统信息:

mysqladmin  Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386

如果以上命令执行后未输入任何信息,说明你的Mysql未安装成功。

2.4 使用 MySQL Client(Mysql客户端) 执行简单的SQL命令

你可以在 MySQL

Client(Mysql客户端) 使用 mysql 命令连接到Mysql服务器上,默认情况下Mysql服务器的密码为空,所以本实例不需要输入密码。

命令如下:

[root@host]# mysql

以上命令执行后会输出 mysql>提示符,这说明你已经成功连接到Mysql服务器上,你可以在 mysql> 提示符执行SQL命令:

mysql>SHOW DATABASES;+----------+

| Database |

+----------+

| mysql |

| test |

+----------+

2 rows in set (0.13 sec)

View Code

2.5 Mysql安装后需要做的

Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码:

[root@host]# mysqladmin -u root password "new_password";

现在你可以通过以下命令来连接到Mysql服务器:

[root@host]# mysql -u root -p

Enter password:*******

2.6 Linux系统启动时启动 MySQL

如果你需要在Linux系统启动时启动 MySQL 服务器,你需要在 /etc/rc.local 文件中添加以下命令:

[root@host]#/etc/init.d/mysqld start

同样,你需要将 mysqld 二进制文件添加到 /etc/init.d/ 目录中。

3.MySQL管理

3.1 启动及关闭 MySQL 服务器

启动mysql服务器:

root@host# cd /usr/bin

./mysqld_safe &

关闭MySQL 服务器:

root@host# cd /usr/bin

./mysqladmin -u root -p shutdown

Enter password: ******

3.2 MySQL用户设置

如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。

以下为添加用户的的实例,用户名为guest,密码为guest123,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:

root @ host # mysql -u root -p

Enter password:** ** ** *mysql>use mysql;

Database changed

mysql>INSERT INTO user (host, user, password,

select_priv, insert_priv, update_priv)

VALUES('localhost', 'guest',

PASSWORD('guest123'), 'Y', 'Y', 'Y');

Query OK,1 row affected(0.20sec)

mysql>FLUSH PRIVILEGES;

Query OK,1 row affected(0.01sec)

mysql>SELECT host, user, password FROM user WHERE

user= 'guest';+-----------+---------+------------------+

| host | user | password |

+-----------+---------+------------------+

| localhost | guest | 6f8c114b58f2ce9e |

+-----------+---------+------------------+

1 row in set(0.00 sec)

View Code

注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。

你可以在创建用户时,为用户指定权限,在对应的权限列中,在插入语句中设置为 'Y' 即可.

另外一种添加用户的方法为通过SQL的 GRANT 命令,你下命令会给指定数据库TUTORIALS添加用户 zara ,密码为 zara123 。

root @ host # mysql -u root -p password;

Enter password:** ** ** *mysql>use mysql;

Database changed

mysql>GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP-> ON TUTORIALS. *

-> TO 'zara' @ 'localhost'

-> IDENTIFIED BY 'zara123';

View Code

3.3 /etc/my.cnf 文件配置

一般情况下,你不需要修改该配置文件,该文件默认配置如下:

[mysqld]

datadir= / var / lib /mysql

socket= / var / lib / mysql /mysql.sock

[mysql.server]

user=mysql

basedir= / var /lib

[safe_mysqld]

err- log = / var / log /mysqld.log

pid- file = / var / run / mysqld / mysqld.pid

View Code

3.4 管理MySQL的命令

以下列出了使用Mysql数据库过程中常用的命令

USE 数据库名 :选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。

SHOW DATABASES: 列出 MySQL 数据库管理系统的数据库列表。

SHOW TABLES: #显示指定数据库的所有表,使用该命令前需要使用 use命令来选择要操作的数据库。

SHOW COLUMNS FROM 数据表: #显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。

create database testdb charset "utf8"; #创建一个叫testdb的数据库,且让其支持中文

drop database testdb; #删除数据库

SHOW INDEX FROM 数据表:显示数据表的详细索引信息,包括PRIMARY KEY(主键)。

4.MySQL数据类型

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

4.1 数值类型

MySQL支持所有标准SQL数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型

大小

范围(有符号)

范围(无符号)

用途

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的值

小数值

4.2 日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型

大小(字节)

范围

格式

用途

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/2037 年某时

YYYYMMDD HHMMSS

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

4.3 字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型

类型

大小

用途

CHAR

0-255字节

定长字符串

VARCHAR

0-65535 字节

变长字符串

TINYBLOB

0-255字节

不超过 255 个字符的二进制字符串

TINYTEXT

0-255字节

短文本字符串

BLOB

0-65 535字节

二进制形式的长文本数据

TEXT

0-65 535字节

长文本数据

MEDIUMBLOB

0-16 777 215字节

二进制形式的中等长度文本数据

MEDIUMTEXT

0-16 777 215字节

中等长度文本数据

LONGBLOB

0-4 294 967 295字节

二进制形式的极大文本数据

LONGTEXT

0-4 294 967 295字节

极大文本数据

CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。

有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求

5.常用MySQL命令

5.1 MySQL 创建数据表

语法:

CREATE TABLE table_name (column_name column_type);

创建一个student表

create table student(

stu_id INT NOT NULL AUTO_INCREMENT,

name CHAR(32) NOT NULL,

age INT NOT NULL,

register_date DATE,

PRIMARY KEY ( stu_id )

);

View Code

AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

PRIMARY KEY关键字用于定义列为主键。 可以使用多列来定义主键,列间以逗号分隔。

5.2 MySQL 插入数据

语法:

INSERT INTO table_name ( field1, field2,...fieldN )

VALUES

( value1, value2,...valueN );

插入数据:

mysql >insert into student(name, age, register_date)-> values("alex li", 22, "2016-03-4");

Query OK,1 row affected(0.00sec)

mysql> select *from student;+--------+---------+-----+---------------+

| stu_id | name | age | register_date |

+--------+---------+-----+---------------+

| 1 | alex li | 22 | 2016-03-04 |

+--------+---------+-----+---------------+

1 row in set(0.00 sec)

View Code

5.3 MySQL 查询数据

语法:

SELECT column_name,column_nameFROM table_name[WHERE Clause][OFFSET M ][LIMIT N]

查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。

SELECT 命令可以读取一条或者多条记录。

你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据

你可以使用 WHERE 语句来包含任何条件。

你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

你可以使用 LIMIT 属性来设定返回的记录数。

mysql> select * from student limit 3 offset 2;

比如这个SQL ,limit后面跟的是3条数据,offset后面是从第3条开始读取

select * from student limit 3 ,1;

而这个SQL,limit后面是从第3条开始读,读取1条信息。

5.4 MySQL where 子句

语法

SELECT field1, field2,...fieldN FROM table_name1, table_name2...

[WHERE condition1 [AND [OR]] condition2.....

使用主键来作为 WHERE 子句的条件查询是非常快速的。

select * from student where register_date > '2016-03-04';

5.5 MySQL UPDATE 查询

语法:

UPDATE table_name SET field1=new-value1, field2=new-value2

[WHERE Clause]

update student set age=22 ,name="Alex Li" where stu_id>3;

5.6 MySQL DELETE 语句

语法:

DELETE FROM table_name [WHERE Clause]
delete from student where stu_id=5;

5.7 MySQL LIKE 子句

语法:

SELECT field1, field2,...fieldN table_name1, table_name2...

WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

select *from student where name binary like "%Li";

select *from student where name binary like  binary "%Li"; #只匹配大写

5.8 MySQL 排序

SELECT field1, field2,...fieldN table_name1, table_name2...

ORDER BY field1, [field2...] [ASC [DESC]]

使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。

select *from student where name like binary "%Li" order by stu_id desc;

5.9 MySQL GROUP BY 语句

SELECT column_name, function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name;

5.10 MySQL ALTER命令

我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。

5.10.1删除,添加或修改表字段

alter table student drop register_date; #从student表删除register_date字段alter table student add phone int(11) not null;#添加phone字段

5.10.2修改字段类型及名称

如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

例如,把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。尝试如下实例:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

5.10.3 ALTER TABLE对Null值和默认值的影响

当你修改字段时,你可以指定是否包含只或者是否设置默认值。

以下实例,指定字段 j 为 NOT NULL 且默认值为100 。

mysql> ALTER TABLE testalter_tbl

-> MODIFY j BIGINT NOT NULL DEFAULT 100;

5.10.4修改表名

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

5.11 关于外键

外键,一个特殊的索引,用于关键2个表,只能是指定内容

mysql>create table class(-> id int not nullprimary key,-> name char(16));

Query OK,0 rows affected (0.02sec)

CREATE TABLE `student2` (

`id` int(11) NOT NULL,

`name`char(16) NOT NULL,

`class_id`int(11) NOT NULL,

PRIMARY KEY (`id`),

KEY `fk_class_key` (`class_id`),

CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`)

)

View Code

此时如果class 表中不存在id 1,student表也插入不了,这就叫外键约束

mysql> insert into student2(id,name,class_id) values(1,'alex', 1);

ERROR1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`testdb`.`student2`, CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`))

mysql> insert into class(id,name) values(1,"linux");

Query OK,1 row affected (0.01sec)

mysql> insert into student2(id,name,class_id) values(1,'alex', 1);

Query OK,1 row affected (0.00sec)

#如果有student表中跟这个class表有关联的数据,你是不能删除class表中与其关联的纪录的

mysql> delete from class where id =1;

ERROR1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`testdb`.`student2`, CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`))

View Code

5.12 MySQL NULL 值处理

我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:

IS NULL: 当列的值是NULL,此运算符返回true。

IS NOT NULL: 当列的值不为NULL, 运算符返回true。

<=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。

关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回false,即 NULL = NULL 返回false 。

MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。

5.13 Mysql 连接(left join, right join, inner join ,full

join)

你可以在SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

JOIN 按照功能大致分为如下三类:

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

假设两张表内容如下:

A    B

-    -

1    3

2    4

3    5

4    6

5.13.1 Inner join

select * from a INNER JOIN b on a.a = b.b;

select a.*,b.* from a,b where a.a = b.b;

a | b

--+--

3 | 3

4 | 4

其实就是只显示2个表的交集

5.13.2  Left join

select * from a LEFT JOIN b on a.a = b.b;

a | b

--+-----

1 | null

2 | null

3 | 3

4 | 4

5.13.3  Right join

select * from a RIGHT JOIN b on a.a = b.b;

a    |  b

-----+----

3    |  3

4    |  4

null |  5

null |  6

6.事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务

事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行

事务用来管理insert,update,delete语句

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

1、事务的原子性:一组事务,要么成功;要么撤回。

2、稳定性 : 有非法数据(外键约束之类),事务撤回。

3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得,

innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。

在Mysql控制台使用事务来操作

mysql> begin; #开始一个事务

mysql> insert into a (a) values(555);

mysql>rollback;回滚 , 这样数据是不会写入的

当然如果上面的数据没问题,就输入commit提交命令就行;

7.索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。

创建索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

CREATE INDEX indexName ON mytable(username(length));

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

普通索引

修改表结构

ALTER mytable ADD INDEX [indexName] ON (username(length))

创建表的时候直接指定

CREATE TABLE mytable(

ID INT NOT NULL,

username VARCHAR(16) NOT NULL,

INDEX [indexName]

(username(length))

);

删除索引的语法

DROP INDEX [indexName] ON mytable;

唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式

创建索引

创建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))

修改表结构

ALTER mytable ADD UNIQUE [indexName] ON (username(length))

创建表的时候直接指定

CREATE TABLE mytable(

ID INT NOT NULL,

username VARCHAR(16) NOT NULL,

UNIQUE [indexName] (username(length))

);

使用ALTER 命令添加和删除索引

有四种方式来添加数据表的索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。

以下实例为在表中添加索引。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:

mysql> ALTER TABLE testalter_tbl DROP INDEX (c);

使用 ALTER 命令添加和删除主键

主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;

mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

也可以使用 ALTER 命令删除主键:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

删除指定时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。

显示索引信息

mysql> SHOWINDEX FROMtable_name\G

8.Python操作MySQL

pymysql : http://www.cnblogs.com/wupeiqi/articles/5713330.html

9.ORM sqlalchemy

http://www.cnblogs.com/alex3714/articles/59783

python动态生成数据库表 orm_Python自动化 【第十二篇】:Python进阶-MySQL和ORM相关推荐

  1. python动态生成数据库表_Python版的数据库查询构造器、ORM及动态迁移数据表。

    Orator Orator提供一个简单和方便的数据库数据处理库. 它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM. 这是完整的文档:http://orat ...

  2. python动态生成数据库表_使用Python创建MySQL数据库实现字段动态添加以及动态的插入数据...

    应用场景: 我们须要设计一个数据库来保存多个文档中每一个文档的keyword. 假如我们每一个文档字符都超过了1000,取当中出现频率最大的为我们的keyword. 如果每个文档的keyword都超过 ...

  3. python动态生成数据库表_Python-Flask:动态创建表的示例详解

    今天小编从项目的实际出发,由于项目某一个表的数据达到好几十万条,此时数据的增删查改会很慢:为了增加提高访问的速度,我们引入动态创建表. 代码如下: from app_factory import ap ...

  4. 通过表单设计器动态生成数据库表以及动态查询的功能实现

    表单设计器动态生成数据库表以及动态查询的功能实现 前言 1. 功能实现 1.1 效果说明 1.2 功能流程图 1.3 具体后端实现 1.4 实现效果 2. 尾声 前言 前两天安排了作为Java小码农的 ...

  5. 八十二、Python | Leetcode贪心算法系列

    @Author:Runsen @Date:2020/7/5 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  6. 七十二、Python | Leetcode字符串系列(下篇)

    @Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  7. 使用Vue动态生成form表单的实例代码

    具有数据收集.校验和提交功能的表单生成器,包含复选框.单选框.输入框.下拉选择框等元素以及,省市区三级联动,时间选择,日期选择,颜色选择,文件/图片上传功能,支持事件扩展. 欢迎大家star学习交流: ...

  8. Hibernate中自动生成数据库表的两种方式

    第一种方式:Hibernate中利用工具类自动生成数据库表 1.建好POJO object, XML Mapping File,配置文件(hibernate.cfg.xml). 2.编写工具类 imp ...

  9. 使用hibernate自动生成数据库表

    使用hibernate自动生成数据库表 使用hibernate自动生成数据库表在hibernate3.2以后有两种方式: 1,使用hbm.xml形式:2,使用注解的形式. 本文介绍第一种方式: IDE ...

最新文章

  1. Magento如何使用和设置CookieSession
  2. 《IP路由协议疑难解析》一1.3 动态路由
  3. mysql @变量和变量的区别及怎么判断记录唯一性
  4. 戴帽子对眼睛是否有好处
  5. windows下node安装
  6. JS对全角与半角的验证,相互转化以及介绍
  7. linux操作系统环境变量的配置
  8. 使用RMAN对数据文件进行恢复
  9. 前端常见跨域解决方案
  10. 【原创】一点点雕虫小技脚本
  11. KnockoutJS(4)-控制文本和外观绑定
  12. 我把SpringBoot的banner换成了美女,老板说工作不饱和,建议安排加班...
  13. oppor9splus科学计算机,oppo r9s plus手机驱动
  14. 关于阿狸狗破戒大师自动安装完cadence17.4后licence不可用问题
  15. 物联网技术,主要应用在哪些领域?
  16. element ui图标使用方法
  17. Python安装distribute包
  18. 【开发工具】Office Tool Plus 安装 Office
  19. 1969年美国(阿波罗)登月真伪
  20. Python爬虫系列之爬取某奢侈品小程序店铺商品数据

热门文章

  1. Java ACM模式
  2. deepin 15.11镜像下载地址
  3. Docker-Compose命令详解
  4. 配置K8S web ui控制台
  5. Scala元组数据的访问
  6. HBase单机版安装详细步骤
  7. Linux 命令:pwd、touch、ll、wget
  8. IntelliJ IDEA使用教程(非常全面)
  9. android 发送重启广播,Android实现关机重启的方法分享
  10. mysql存储过程在实际开发中怎么用_MYSQL存储过程开发中怎么使用游标嵌套