目录
使用REPLACE而不是INSERT。如果记录是新的,它插入就像使用 INSERT。如果它是重复的,新的记录将取代旧的记录:... 9
修改配置文件, 修改secure-file-priv权限... 10
开启服务
net start mysql
关闭服务
net stop mysql
登录
mysql -u root -p
然后提示, 输入111111
创建database
create database learndb
查看database
show databases;
删除database
drop database learndb
选择database
use learndb
创建table
mysql> CREATE TABLE learndb_tb1(
idINT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
author VARCHAR(40) NOT NULL,
date DATE,
PRIMARY KEY (id )
);
删除table
DROP TABLE learndb_tbl ;
往table插入数据
mysql> INSERT INTO learndb_tb1
(tutorial_title, tutorial_author, submission_date)
VALUES
("Learn MySQL", "lynash", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO learndb_tb1
(tutorial_title, tutorial_author, submission_date)
VALUES
("JAVA Tutorial", "yan", '2015-05-06');
从table查询数据
select * from learndb_tb1;
select * from learndb_tb1 where author=’yan’;
更新数据
UPDATE learndb_tb1
SET title = ‘after update title’
WHERE id=2;
删除
DELETE FROM learndb_tb1 WHERE id=2
LIKE操作
当LIKE连同%符号使用,那么它就会像一个元字符的搜索, 以百分号后面的结尾.
SELECT * FROM learndb_tb1 WHERE author LIKE‘%an1’;
ORDER BY排序
SELECT FROM learndb_tb1 ORDER BY author DESC.
或者ASC
双表查询
select a.id, a.author, b.count
from learndb_tb1 a, count_tb1 b
where a.author = b.author;
NULL
数值为空的处理
create table null_tb(author varchar(40) notnull, count int);
insert into null_tb (author, count) values (‘name1’, 20);
select * from null_tb;
select * from null_tb where count is null;
select * from null_tb where count is not null;
只能用is 不能用=
正则表达式
在前面我们已经看到了MySQL的模式匹配:LIKE ...%. MySQL支持另一种类型的模式匹配的操作基于正则表达式和正则表达式运算符。如果知道PHP或Perl,那么它是非常简单的,因为这匹配非常相似于脚本正则表达式。
以下是模式的表格,其可以连同REGEXP运算符使用。
模式 |
什么样的模式匹配 |
^ |
开始的一个字符串 |
$ |
结束的一个字符串 |
. |
任意单个字符 |
[...] |
方括号中列出的任何字符 |
[^...] |
任何字符方括号之间不会被列出 |
p1|p2|p3 |
交替;匹配的任何模式 p1, p2, 或 p3 |
* |
前一个元素的零个或多个实例 |
+ |
前面元素的一或多个实例 |
{n} |
前一个元素的n个实例 |
{m,n} |
前一个元素的 m 到 n 个实例 |
示例
现在根据上面的表格,可以在不同的设备类型用SQL查询来满足要求。在这里,列出一些的理解。考虑有一个表称为 person_tbl,它是有一个 name 字段:
查询查找所有以 “st” 开头的名字:
mysql> SELECT name FROM person_tbl WHEREname REGEXP '^st';
查询找到所有以 'ok' 结尾的名字
mysql> SELECT name FROM person_tbl WHEREname REGEXP 'ok$';
查询查找其中包含 'mar' 所有的名字
mysql> SELECT name FROM person_tbl WHEREname REGEXP 'mar';
查询查找以元音 'ok' 结尾的所有名称
mysql> SELECT name FROM person_tbl WHEREname REGEXP '^[aeiou]|ok$';
MySQL Alter命令
显示列
SHOW COLUMNS FROM null_tb;
增加一个列
alter table null_tb ADD i INT;
删除一个列
alter table null_tb drop i;
FIRST AFTER用来指定列位置
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTERc;
FIRST 和 AFTER 只能在ADD子句中使用。这意味着,如果你想在表中重新排位现有列,首先必须删除(DROP )它,然后在新的位置添加(ADD)它。
改变列定义
alter table bull_tb modify author char(10);
改变之后, 数据还在.
改变列名字和定义
alter table null_tb change count bookcountbigint;
设置默认值
修改默认值
alter table null_tb alter bookcount set default1000;
删除默认值
ALTER TABLE null_tb ALTER i DROP DEFAULT;
影响缺省值NULL
alter table null_tb modify author varchar(24)not null default ‘admin’;
重命名表明
ALTER TABLE null_tbl RENAME TO alter_tbl;
修改表类型
略...
索引
数据库索引是一种数据结构,目的是提高表的操作速度。可以使用一个或多个列,提供快速随机查找和访问记录的高效排序来创建索引。
要创建的索引,应当认为哪列将用于使SQL查询,创建对这些列的一个或多个索引。
实际上,索引也是表,其中保存主键或索引字段的指针并指向每个记录到实际的表的类型。
用户无法看到索引,它们只是用来加速查询,并将被用于数据库搜索引擎在查找记录时提高速度。
INSERT和UPDATE语句需要更多的时间来创建索引,作为在SELECT语句快速在这些表上操作。其原因是,在执行插入或更新数据时,数据库需要将插入或更新索引值也更新。
创建索引
create index COUNT_INDEX(索引名) on count_tb1 (count(列名) desc);
删除索引
alter table count_tb1 drop index COUNT_INDEX;
使用alter来添加和删除索引
alter table count_tb1 add index(count);
使用drop删除索引
alter table count_tb1 drop index(count);
使用alter来添加和删除PRIMARY KEY
主键不能为空, 先修改为不能为空
alter table count_tb1 modify author varchar(24)not null;
增加主键
alter table count_tb1 add primary key (author);
删除主键
alter table count_tb1 drop primary key;
复制表
查看当前表结构
show create table count_tb1 \G;
创建克隆表, 就是复制上面的命令
此时内容是空的, 开始拷贝数据
insert into clone_count_tb1(author, count)select author, count from count_tb1;
再查询, 就是被拷贝表的数据了
mysql序列的使用
使用AUTO_INCREMENT列
create table test(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(15) NOT NULL)
AUTO_INCERMENT = 100;
从100开始, 序列号
insert into test (username) values
(‘ly’),
(‘liyan’),
(‘jiazhuang’);
重复记录处理
可以使用适当表字段的PRIMARY KEY 或 UNIQUE 来防止重复记录
CREATE TABLE person_tbl
(
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
这是允许重复的, 加上主键防止重复.
如果插入一条与现有记录重复到表,在列或定义索引列,表中一个唯一索引的存在通常会导致错误的发生。
应该使用 INSERT IGNORE 而不是INSERT。如果记录与现有现有不重复时,MySQL将其正常插入。如果记录是一个重复的,则IGNORE 关键字告诉MySQL丢弃它而不会产生错误。
create table tb_person(
firstname char(20) not null,
lastname char(20) not null,
sex char(10),
primary key(lastname, firstname));
insert into tb_person(lastname, firstname) values(‘yang’, ‘li’);
insert ignore into tb_person(lastname, firstname)values (‘yang’, ‘li’);
使用REPLACE而不是INSERT。如果记录是新的,它插入就像使用 INSERT。如果它是重复的,新的记录将取代旧的记录:
replace into tb_person (lastname, firstname,sex) values (‘yang’, ‘li’, ‘female’);
统计重复内容
select count(*) as re, lastname, firstname
from tb_person group by lastname, firstname
having re > 1;
显示出所有满足条件的数量
select lastname, firstname, count(*) from tb_person
group by lastname, firstname;
删除重复:临时表重命名法
create table tmp select lastname,firstname, sex
from tb_person
group by lastname, firstname;
drop table tb_person;
alter table tmp rename to tb_person;
mysql数据库导出
修改配置文件, 修改secure-file-priv权限
selecct * from tb_person into outfile ‘F:\\tb_person.txt’
按指定格式导出数据
select * from tb_person into outfile ‘F:\\for_person.txt’
fields terminated by ‘,’ enclosed by ‘”’
lines terminated by ‘\r\n’;
导出原始数据
不要进入到数据库内输入导出命令
直接在cmd输入:
mysqldump -u root -p learndb>F:\\temp\\learndb.sql
注意上面那条命令不要加分号
根据导出文件导入数据库
删除数据库
drop database learndb;
导入之前, 先要进入mysql建立数据库
mysql -u root -p
111111
create database learndb;
exit
在cmd输入
mysql -h localhost -u root -p learndb < F:\\temp\\learndb.sql
111111
就ok了