Mysql数据库基础:安装-练习

整理来自-菜鸟教程:http://www.runoob.com/mysql/mysql-tutorial.html

说明:适用初学者,大神勿喷

MYsql安装:

Mysql 下载网址:https://www.mysql.com/downloads/

检查自己的系统上是否自带安装mysqlrmp -qa |grep mysql

删除命令:rpm -e mysql (普通删除)

          rpm -e --nodeps mysql (上述命令删除不全时可以使用这个命令)

安装mysqlyum install mysqlyum install mysql-serveryum install mysql-devel

启动mysqlservice mysqld start

备注:如果我们第一次启动mysqlmysql服务器会进行初始化的配置;

扫描二维码关注公众号,回复: 2344734 查看本文章

如果是centos7系统,由于mysql数据库从默认的程序列表中删除,可以使用mariadb代替;

Mariadb数据库的相命令:

Systemctl start mariadb (启动mariadb数据库)

Systemctl stop mariadb (停止mariadb数据库)

Systemctl reatart mariadb (重启mariadb数据库)

Systemctl enable mariadb (设置开机的确启动)

验证mysql安装:mysqladmin --version(基于系统的相关信息)

安装完成后mysql的默认密码为空,修改密码:mysqladmin -u root password“******”;

设置好后连接服务器:mysql -u root -p ,接着出现enter password 输入密码即可;

启动mysql服务器:

ps -ef|grep mysqld(查看是否启动)

如果未启动,执行:cd /usr/bin  ./mysqld_safe  &

关闭mysql服务器:

Cd /usr/bin   执行:./mysqladmin -u root -p shutdown出现enter password输入密码即可;

配置文件在/etc/my.conf;(一般不需要修改可以指定错误日志的路径)

———————————————————————————————————————

Windows下安装mysql

1.下载安装包解压到指定目录;

2.配置环境变量path后追加路径如:C:\Program Files\mysql-5.7.19-winx64\bin

3.my-default改为my.ini,配置为:

[mysqld]

basedir=C:\Program Files\mysql-5.7.19-winx64mysql所在目录)

datadir=C:\Program Files\mysql-5.7.19-winx64\data mysql所在目录\data)(没有的话就创建写进去,data文件夹没有也自己创建

4.管理员身份启动cmd,进入到mysql所在路径,执行mysqld -install,如果已经存在,查看一下,命令:sc query mysql  删除命令:sc delete mysql  最后载执行mysqld -install

5.启动mysql服务,net start mysql(说明我的版本解压后没有data文件夹和ini的配置文件,都是需要手动创建,但是到启动这步就失败,需要将创建的配置文件放进bin文件夹里,执行:mysqld --initialize --user=mysql --console(记下初始化的密码) 然后在mysqld -install(如果前边安装了就删除),再执行net start mysql,最后进入:mysql -u root -p输入记下的初始化密码),关闭执行net stop mysql.

6.修改初始化密码:进入mysql执行:mysql> set password for用户名@localhost = password('新密码');  或者mysqladmin -u用户名 -p旧密码password 新密码  或者【首先登录MySQL。连接权限数据库:use mysql;改密码:update user set password=password("shapolang") where user="root";(别忘了最后加分号);刷新权限(必须步骤):flush privileges;重新登录,输入新密码shapolangok了;】

7.刚装上的mysql只能默认127.0.0.1或者localhost访问 需要别的ip访问需要设置:

如:mysql -uroot -h127.0.0.1 -p可以访问 但mysql -uroot -h192.168.1.101 -p不可以访问 。

修改:进入mysql执行use mysql后输入下列括号中的命令即可。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.107' IDENTIFIED BY '123123' WITH GRANT OPTION;--设置账号为root密码为123123可以访问用ip 192.168.1.107访问mysql服务器 。这时候可以用navicat premium去链接,不然拒绝链接。

8.查看版本:show variables like ‘version’;

———————————————————————————————————————

MYsql管理:

数据库管理命令:

Use+数据库名(选择将要操作的数据库)

SHOW DATABASES (列出来所有的数据库列表)

SHOW TABLES(显示指定数据里的所有表单)

SHOW COLUMNS FROM 数据表(显示数据表的属性,主键信息,默认值等信息)

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

SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G(按列打印数据库中的表)

用户设置:

mysql数据库中的user添加用户:

1.mysql> INSERT INTO user

          (host, user, password,

           select_priv, insert_priv, update_priv)

           VALUES ('localhost', 'guest',

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

mysql> FLUSH PRIVILEGES;(不使用这个命令需要重启mysql服务器)

Mysql5.7版本中password换成了authentication_string。(这种方法出现Field 'id' doesn't have a default value-------???)

修改配置文件my.ini中的

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2.mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

    -> ON TUTORIALS.*

    -> TO 'zara'@'localhost'

-> IDENTIFIED BY 'zara123';

MYsqlphp用法:

函数格式如:mysqli_funtion(value,value,...)

例如:

mysqli_connect($connect);

mysqli_query($connect,"SQL 语句");

mysqli_fetch_array()

mysqli_close()

MYsql中创建及删除数据库:

mysqladmin  -uroot -h192.168.1.107 -p create xxxxxx(创建了名为xxxxx的数据库)

mysqladmin  -u -root -p create xxxxxx(创建了名为xxxxx的数据库)

或者php脚本创建数据库--暂不关注

mysqladmin  -uroot -h192.168.1.107 -p drop xxxxxx(删除了名为xxxxx的数据库)

mysqladmin  -u -root -p drop xxxxxx(删除了名为xxxxx的数据库)

或者php脚本删除数据库--暂不关注

MYsql数据类型:

--暂不关注

MYsql创建及删除数据表:

通用语法:

CREATE TABLE table_name (column_name column_type);

CREATE TABLE IF NOT EXISTS `runoob_tbl`(

   `runoob_id` INT UNSIGNED AUTO_INCREMENT,

   `runoob_title` VARCHAR(100) NOT NULL,

   `runoob_author` VARCHAR(40) NOT NULL,

   `submission_date` DATE,

   PRIMARY KEY ( `runoob_id` )

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

或者php脚本创建数据表--暂不关注

可以使用desc+数据表查看表结构。

如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL,就会报错。

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

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

ENGINE 设置存储引擎,CHARSET设置编码。

 

删除命令:DROP TABLE 数据表名

或者php脚本删除数据表--暂不关注

MYsql数据表中插入数据:

语法:

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

                       VALUES

                       ( value1, value2,...valueN );

如果是字符型,必须加””或者’’ 如:

mysql> INSERT INTO runoob_tbl

    -> (runoob_title, runoob_author, submission_date)

    -> VALUES

    -> ("学习 MySQL", "菜鸟教程", NOW());

Query OK, 1 rows affected, 1 warnings (0.01 sec)

mysql> INSERT INTO runoob_tbl

    -> (runoob_title, runoob_author, submission_date)

    -> VALUES

-> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');

NOWsql的一个函数,返回时间和日期,->不是sql语句结束是换行,结束标志是;

MYsql数据查询替换删除排序分组等:

select语法:

SELECT column_name,column_name

FROM table_name

[WHERE Clause]

[OFFSET M ][LIMIT N]

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

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

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

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

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

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

例:select *from runoob_tbl;

Where语法:

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

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

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

你可以在 WHERE 子句中指定任何条件。

你可以使用 AND 或者 OR 指定一个或多个条件。

WHERE 子句也可以运用于 SQLDELETE或者 UPDATE命令。

WHERE 子句类似于程序语言中的 if条件,根据 MySQL表中的字段值来读取指定的数据。

操作符类似与c语言,只是不等于可以为!=或者<>.

Where本身不区分大小写,可以使用 BINARY来区分

例:SELECT *from runoob_tbl WHERE BINARY runoob_author='runoob.com';

UPDATA语法:(其实就是替换修改某个字段的值

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

[WHERE Clause]

你可以同时更新一个或多个字段。

你可以在 WHERE 子句中指定任何条件。

你可以在一个单独表中同时更新数据。

当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。

例:UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;

DELETE语法:

DELETE FROM table_name [WHERE Clause]

如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。

你可以在 WHERE 子句中指定任何条件

您可以在单个表中一次性删除记录。

当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。

例:DELETE FROM runoob_tbl WHERE runoob_id=3;

LIKE语法:

SELECT field1, field2,...fieldN

FROM table_name

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

你可以在 WHERE 子句中指定任何条件。

你可以在 WHERE 子句中使用LIKE子句。

你可以使用LIKE子句代替等号=

LIKE 通常与 %一同使用,类似于一个元字符的搜索。

你可以使用 AND 或者 OR 指定一个或多个条件。

你可以在 DELETE UPDATE 命令中使用WHERE...LIKE 子句来指定条件。

例:SELECT *from runoob_tbl WHERE runoob_author LIKE '%COM';

 

UNION语法:

SELECT expression1, expression2, ... expression_n

FROM tables

[WHERE conditions]

UNION [ALL | DISTINCT]

SELECT expression1, expression2, ... expression_n

FROM tables

[WHERE conditions];

expression1, expression2, ... expression_n: 要检索的列。

tables: 要检索的数据表。

WHERE conditions: 可选, 检索条件。

DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION操作符已经删除了重复数据,所以 DISTINCT修饰符对结果没啥影响。

ALL: 可选,返回所有结果集,包含重复数据。

例:SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

 

ORDER BY语法:

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

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

你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。

你可以设定多个字段来排序。

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

你可以添加 WHERE...LIKE 子句来设置条件。

例:SELECT *from runoob_tbl ORDER BY submission_date ASC;(升序)

     SELECT *from runoob_tbl ORDER BY submission_date DESC;(降序)

 

GROUP BY 语法:

SELECT column_name, function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name;

根据一列或者多列进行分组

例:SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;(统计每个人的记录数)

SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY nameWITH ROLLUP;(在第一步的基础上再统计每个人的登陆次数)结果总的登录次数的nameNULL,我们可以使用coalesceabc)代替:

参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null,则返回为null(没意义)。

以下实例中如果名字为空我们使用总数代替:

语句改为:SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

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

| name   | singin_count |

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

| 小丽 |            2 |

| 小明 |            7 |

| 小王 |            7 |

| NULL   |           16 |

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

 

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

| coalesce(name, '总数') | singin_count |

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

| 小丽                   |            2 |

| 小明                   |            7 |

| 小王                   |            7 |

| 总数                   |           16 |

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

JOIN语法:

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

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

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

两个表如下:

mysql> SELECT * FROM tcount_tbl;

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

| runoob_author | runoob_count |

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

| 菜鸟教程  | 10           |

| RUNOOB.COM    | 20           |

| Google        | 22           |

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

 

mysql> SELECT * from runoob_tbl;

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

| runoob_id | runoob_title  | runoob_author | submission_date |

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

| 1         | 学习 PHP    | 菜鸟教程  | 2017-04-12      |

| 2         | 学习 MySQL  | 菜鸟教程  | 2017-04-12      |

| 3         | 学习 Java   | RUNOOB.COM    | 2015-05-01      |

| 4         | 学习 Python | RUNOOB.COM    | 2016-03-06      |

| 5         | 学习 C      | FK            | 2017-04-05      |

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

SELECT a.runoob_id,a.runoob_author,b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author =b.runoob_author;

等价于:SELECT a.runoob_id,a.runoob_author,b.runoob_count FROM runoob_tbl a,tcount_tbl b WHERE a.runoob_author =b.runoob_author;

连接以上两张表来读取runoob_tbl表中所有runoob_author字段在tcount_tbl表对应的runoob_count字段值:

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

| a.runoob_id | a.runoob_author | b.runoob_count |

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

| 1           | 菜鸟教程    | 10             |

| 2           | 菜鸟教程    | 10             |

| 3           | RUNOOB.COM      | 20             |

| 4           | RUNOOB.COM      | 20             |

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

 

LEFT_JOIN会读取左表全部数据即使右表无数据

SELECT a.runoob_id,a.runoob_author,b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author =b.runoob_author;

runoob_tbl 为左表,tcount_tbl为右表!

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

| a.runoob_id | a.runoob_author | b.runoob_count |

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

| 1           | 菜鸟教程    | 10             |

| 2           | 菜鸟教程    | 10             |

| 3           | RUNOOB.COM      | 20             |

| 4           | RUNOOB.COM      | 20             |

| 5           | FK              | NULL           |

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

该语句会读取左边的数据表 runoob_tbl的所有选取的字段数据,即便在右侧表 tcount_tbl中没有对应的runoob_author 字段值。

 

 

RIGHT JOIN:会读取右边全部数据,即使左边没有对应

SELECT a.runoob_id,a.runoob_author,b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author =b.runoob_author;

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

| a.runoob_id | a.runoob_author | b.runoob_count |

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

| 1           | 菜鸟教程    | 10             |

| 2           | 菜鸟教程    | 10             |

| 3           | RUNOOB.COM      | 20             |

| 4           | RUNOOB.COM      | 20             |

| NULL        | NULL            | 22             |

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

 

 

 

Mysql -NULL处理:

为了查询字段含有NULLMySQL提供了三大运算符:

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 NULLIS NOT NULL运算符。

Mysql -正则表达式:

MySQL中使用 REGEXP操作符来进行正则表达式匹配。

^

匹配输入字符串的开始位置。如果设置了 RegExp对象的 Multiline属性,^也匹配 '\n''\r'之后的位置。

$

匹配输入字符串的结束位置。如果设置了RegExp对象的 Multiline属性,$也匹配 '\n''\r'之前的位置。

.

匹配除 "\n"之外的任何单个字符。要匹配包括 '\n'在内的任何字符,请使用象 '[.\n]'的模式。

[...]

字符集合。匹配所包含的任意一个字符。例如, '[abc]'可以匹配 "plain"中的 'a'

[^...]

负值字符集合。匹配未包含的任意字符。例如, '[^abc]'可以匹配 "plain"中的'p'

p1|p2|p3

匹配 p1 p2 p3。例如,'z|food'能匹配 "z""food"'(z|f)ood'则匹配 "zood""food"

*

匹配前面的子表达式零次或多次。例如,zo*能匹配 "z" 以及 "zoo"*等价于{0,}

+

匹配前面的子表达式一次或多次。例如,'zo+'能匹配 "zo" 以及 "zoo",但不能匹配"z"+等价于 {1,}

{n}

n 是一个非负整数。匹配确定的n 次。例如,'o{2}'不能匹配 "Bob"中的 'o',但是能匹配"food" 中的两个o

{n,m}

m n均为非负整数,其中n <= m。最少匹配n 次且最多匹配m 次。

 

查找name字段中以'st'为开头的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

查找name字段中以'ok'为结尾的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

查找name字段中包含'mar'字符串的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

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 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令BEGIN START TRANSACTION,或者执行命令SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

事物控制语句:

1.BEGINSTART TRANSACTION;显式地开启一个事务;

2.COMMIT或者COMMIT WORKCOMMIT会提交事务,并永久保存对数据库的修改;

3.ROLLBACK或者ROLLBACK WORK,回滚会结束用户的事务,并撤销所有未提交的修改;

4.SAVEPOINT identifierSAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT

5.RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

6.ROLLBACK TO identifier;把事务回滚到标记点;

7.SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE

MYSQL 事务处理主要有两种方法:

1.BEGIN, ROLLBACK, COMMIT来实现

BEGIN 开始一个事务

ROLLBACK 事务回滚

COMMIT 事务确认

2.直接用 SET来改变 MySQL的自动提交模式:

SET AUTOCOMMIT=0 禁止自动提交

SET AUTOCOMMIT=1 开启自动提交

Mysql--alter命令:

SET AUTOCOMMIT=1 开启自动提交

我们需要修改表名或者表的某个字段时用到它。

删除表中某个字段:

Alter table 表名 drop 字段;

如:alter table mytest drop i

添加某个字段:

Alter table 表名 add 字段 类型 ;(默认添加到末尾)

Alter table 表名 add 字段 类型 first;(默认添加在第一列)

Alter table 表名 add 字段 类型 after 字段名;(在后字段名之后一列添加)

如:alter table mytest add ii int

    alter table mytest add ii int first

    alter table mytest add ii int after name

修改某个字段及类型:

Alter table 表名 modify 字段 新类型;

Alter table 表名 change 字段 新字段()类型;

如: alter table mytest modify ii char

     Alter table mytest change ii xx char(int)

修改字段的默认值:

上述操作不说明默认值,一般默认为NULL

Alter table 表名 alter 字段 set default 数值;

Alter table 表名 alter 字段 drop default

Alter table mytest alter xx set default 100

Alter table mytest alter xx drop default

修改数据表类型:

Alter table mytest  engine=MYISAM;//修改类型

SHOW TABLE STATUS LIKE 'mytest'\G//查看

修改表名:

Alter table mytest rename to newtest

 

Mysql--alter索引:

索引分为:单列索引和组合索引;单列索引指一个索引包含单列,一个表可以有多个单列索引组合索引指一个索引包含多列。

普通索引:(单列)

直接创建:

create index 索引名on表名(字段(长度))//加长度没通过--字段必须存在。。

Create index search on mytest name);

如果是CHARVARCHAR类型,length可以小于字段实际长度;如果是BLOBTEXT类型,必须指定length

修改表单创建:

Alter table 表名 add index 索引名 (字段)//字段必须存在

Alter table mytest add index search name);

创建表的时候指定:

mysql> create table mmm(

    -> id int(11) not null,

    -> name char(8) not null,

    -> index search (name(5))     //指定索引名及字段

    -> );

创建成功对应的DDL为:

CREATE TABLE `mytestt` (

  `id` int(11) NOT NULL,

  `name` char(8) NOT NULL,

  KEY `search` (`name`(5))

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

查看索引:

Show index from 表名;

Show index from mytestt \G

删除索引:

Drop index 索引名 on 表名;或者alter table表名 drop index(字段);

Drop index search on mytestt

唯一索引:(单列)

直接创建:

create  unique index 索引名on 表名(字段(长度))//加长度没通过--字段必须存在。。

Create unique index search on mytestt  (name);

修改表单创建:

Alter table 表名 add unique 索引名 (字段);

Alter table mytestt add unique search id);

创建表的时候指定:

mysql> create table mytestt(

    -> id int(11) not null,

    -> name char(8) not null,

    -> unique search (name(5))     //指定索引名及字段

    -> );

创建成功对应的DDL为:

CREATE TABLE `mytestt` (

  `id` int(11) NOT NULL,

  `name` char(8) NOT NULL,

  UNIQUE KEY `search` (`name`(5))

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

组合索引:(对应普通索引和唯一索引)

创建表:

直接创建:

create unique index 索引名 on 表名(字段,字段)

Create unique index search on zxd (name ,age);

修改表单创建:

Alter table 表名 add unique 索引名 (字段,字段)

Alter table zxd add unique search nameage;

创建表:

mysql> create table zxd(

    -> id int(11) not null,

    -> name char(11) not null,

    -> age int(8) not null,

    -> primary key (id),

    -> unique search (id,name(8))

    -> );

创建成功对应的DDL为:

CREATE TABLE `zxd` (

  `id` int(11) NOT NULL,

  `name` char(11) NOT NULL,

  `age` int(8) NOT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `search` (`id`,`name`(8))

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这个主键也是索引值删除的时候只能删掉name这个索引。

 

注:组合索引原则:最左前缀原则!

   针对上边的表相当于有两组:id name id 而没有name这组。

Select *from zxd where id=1 and name=”zxd”

Select *from zxd where id=1 ;

没有Select *from zxd where name=”zxd”

使用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--临时表:

创建方法:create temporary table 表名.......

创建完成后可以添加数据并查看,但是在数据表列表中看不到这个临时表(show tables)

断开数据库后自动删除临时表,也可以手动删除:drop table 临时表名

Mysql--复制表:

断开数据库后自动删除临时表,也可以手动删除:drop table 临时表名;

1.show create table 表名 \G  (按列显示老表信息)

2.Create table 新表名....    (按照上边显示的信息创建空表)

3.Insert into 新表名(..,..,..,..) select字段,...字段from 表名;

    例:

    mysql> show create table mm ;

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

| Table | Create Table                                                                                                  |

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

| mm    | CREATE TABLE `mm` (

  `id` int(11) NOT NULL,

  `hah` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

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

 

mysql> create table mmm(

    -> id int(11)not null,

    -> hah int(11) default null

    -> )engine =InnoDB DEFAULT CHARSET=latin1;

Query OK, 0 rows affected

 

mysql> insert into mmm(id,hah) select id,hah from mm;

Query OK, 2 rows affected

 

Mysql--元数据:

断开数据库后自动删除临时表,也可以手动删除:drop table 临时表名;

查询结果信息 服务器信息数据库数据表信息

Select  version();  //显示服务器版本信息

Select  database(); // 显示当前数据库名或者返回NULL

Select  user();   //显示当前用户名

Show  status;    //显示服务器状态

Show  variables;  //显示服务器配置变量

 

Mysql--处理重复数据:

设置主键(primary key)或者索引字段(unique index)来保证数据唯一;

两个字段不重复就设置两个主键 或者两个索引字段;

Insert ignore into 表名 .....insert into表名 ....区别:前者重复不报错也不保存

统计重复数据

mysql> select count(*)as repetitions,haha

    -> from mmmm

    -> group by haha         //列出重复的列

    -> having repetitions >1;  //设置重复数大于1

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

| repetitions | haha |

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

|           2 | asa  |

|           3 | cd   |

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

过滤重复数据:使用distinct或者group by

例:mysql> select distinct name from life_tbl;

mysql> select name from life_tbl group by name;

删除重复数据:《-------

Mysql--导出数据:

语句:select ......into outfile......

      Select *from life_tbl into outfile ‘/tmp/my.txt’;

导出表作为原始数据:

mysqldumpmysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。

使用mysqldump导出数据需要使用--tab 选项来指定导出文件指定的目录,该目标必须是可写的。

mysqldump -u root -p --no-create-info \

            --tab=/tmp life_tbl

password ******

导出SQL格式的数据:

mysqldump -u root -p mysql  life_tbl > my.txt

password ******

如果你需要导出整个数据库的数据,可以使用以下命令:

$ mysqldump -u root -p mysql > database_dump.txt

password ******

如果需要备份所有数据库,可以使用以下命令:

$ mysqldump -u root -p --all-databases > database_dump.txt

password ******

--all-databases 选项在 MySQL 3.23.12及以后版本加入。

Mysql--导出数据:

语句:mysql> LOAD DATA LOCAL INFILE 'dump.txt'INTO TABLE mytbl;   

   Local:表名从当前主机路径读取,不加表示从服务器上读取。

*****************************************************************************

  

查询表单中某个字段不重复的数据:

id

na

aa

1

ss

3

2

ff

5

3

gg

4

4

hh

5

语句:

select na, aa from ss group by aa ;

结果如此


语句:

select *,count(distinct aa)from ss group by aa;

结果如此

查询数据库库特征表单id唯一urlNULLid重复url全为NULL

语句:嵌套

select *

  from lib_er_rel

 where rel_source_id not in

 (

 select rel_source_id from lib_er_rel where url is not null

 )

   and url is null and db_feature <> '0'

猜你喜欢

转载自blog.csdn.net/linuxzhuxiaodi/article/details/78054736
今日推荐