02_1 操作数据库

(1)创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specification]...]

解释:
[IF NOT EXISTS]创建时提前检查一下是否存在数据库
create_specification:(创建条件)
         [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
         CHARACTER SET编码集
         COLLATE校对规则
  • 创建一个名称为mysql的数据库
CREATE DATABASE mysql;
  • 创建一个使用utf8字符集的mysql2数据库
CREATE DATABASE mysql2 CHARACTER SET utf8;
  • 创建一个使用utf8字符集,并带校对规则的mysql3数据库
CREATE DATABASE mysql3 CHARACTER SET gbk COLLATE gbk_bin;
  • 列出可用的字符集:
SHOW CHARACTER SET;
mysql> show character set;
  • 列出gbk和gb2312字符集的校对规则:
SHOW COLLATION LIKE ‘字符集名%’;
mysql> show collation like 'gbk%';
mysql> show collation like 'gb2312%';
    •   校对规则一般有这些特征:

      •     两个不同的字符集不能有相同的校对规则。
      •     每个字符集有一个默认校对规则。

(2)查看数据库

显示数据库语句:
SHOW DATABASES;

显示数据库创建语句:
SHOW CREATE DATABASE db_name;

(3)修改数据库

ALTER DATABASE [IF NOT EXISTS] db_name [alter_specification [,alter_specification]…]

解释:
create_specification:(创建条件)
[DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name

修改某一个库的字符集为utf8:
Alter database mydb character set utf8;

(4)删除数据库

DROP DATABASE [IF NOT EXISTS] db_name;

删除创建的数据库mydb;
drop database mydb;

(5)选择数据库

USE db_name;

使用mydb3数据库:
use mydb3;

查看当前选择的数据库:
SELECT DATABASE();

02_2 数据类型

  • 整型:TINYINT  SMALLINT  MEDIUMINT  INT  BIGINT
  • 浮点类型和定点数类型:FLOAT  DOUBLE  DECLMAL(M,D)
  • 日期与时间类型:YEAR  DATE  TIME  DATETIME  TIMESTAMP
  • 字符串和二进制类型:CHAR  VARCHAR  BINARY  VARBINARY  BLOB  TEXT  ENUM  SET  BIT

02_3 数据表的基本操作

(1)增加表

create table table_name(
field1 datatype,
field2 datatype,
field3 datatype,
field4 datatype,
.
fieldn datatype
)character set 字符集 collate 校对规则
field:指定列名  datatype:指定列类型,列和列的声明之间用,隔开,最后的生命处无,但括号外要加;;

练习:创建一个员工表employee

create table employee(

id int,

name varchar(20),

gender char(1),

birthday date,

entry_date date,

job varchar(50),

salay double,

resume text

);

(2)查看表

查询当前数据库中所有的表:show tables;

查看表结构:desc tab_name;或者describe tab_name;

查看表的键表语句:show create table table_name;

(3)修改表

追加列:alter table table_name add (column datatype [DEFAULT expr][,column datatype]...);

修改列:alter table table_name modify (column datatype [DEFAULT expr][,column datatype]...);

删除列:alter table table_name drop (column);

修改表的名称:rename table table_name to 新表名;

修改列的名称:alter table table_name change [column] old_col_name column_definition;

修改表的字符编码:alter table table_name character set utf8;

修改字段的排列位置:alter table tab_name modify 字段名1 数据类型 first|after 字段名2

练习:

(1)在上面员工表的基础上增加一个image列;

alter table employee add image blob;

(2)修改job列,使其长度为60;

alter table employee modify job varchar(60);

(3)删除gender列;

alter table employee drop gender;

(4)更改表名为user;

rename table employee to user;

(5)修改表的字符为utf8;

alter table user character set utf8;

(6)列名name修改为username;

alter table user change name username varchar(20);

(7)将数据表grade的username字段修改为表的第一个字段;

alter table grade modify username varchar(20) first;

(8)将数据表grade的id字段插入到字段grade字段的后面;

alter table grade modify id int(20) after grade;

(4)删除表

drop table table_name;

删除上面的user表:

drop table user;

02_4 表的约束

数据库中的表的约束:约束表中的列的值的特点,维护数据库完整性的规则

PRIMARY KEY  FOREIGN KEY  NOT NULL  UNIQUE   DEFAULT

primary key:主键约束,用于唯一标识对应的记录

foreign key:外键约束

not null:非空约束

unique:唯一性约束

default:默认约束,用于设置字段的默认值

(1)主键约束

单字段主键:

字段名 数据类型 primary key

练习:设置id为主键

create table employee(

id int primary key,

name varchar(20),

gender char(1),

birthday date,

entry_date date,

job varchar(50),

salay double,

resume text

);

show tables;

desc employee;

多字段主键:

primary key (字段名1,字段名2,字段名3,…,字段名n)

create table example(

stu_id int,

grade float,

course_id int,

primary key(stu_id,course_id)

);

(2)非空约束

字段名 数据类型 NOT NULL;

练习:设置性别不能为空

drop table employee;

create table employee(

id int primary key,

name varchar(20),

gender char(1) not null,

birthday date,

entry_date date,

job varchar(50),

salay double,

resume text

);

show tables;

desc employee;

(3)唯一约束

字段名 数据类型 UNIQUE;

练习:设置姓名不允许重复

drop table employee;

create table employee(

id int primary key,

name varchar(20) unique,

gender char(1) not null,

birthday date,

entry_date date,

job varchar(50),

salay double,

resume text

);

show tables;

desc employee;

(4)默认约束

字段名 数据类型 DEFAULT 默认值;

练习:设置job的默认值为实习生

drop table employee;

create table employee(

id int primary key,

name varchar(20) unique,

gender char(1) not null,

birthday date,

entry_date date,

job varchar(50) default 'sxs',

salay double,

resume text

);

show tables;

desc employee;

(5)设置表的字段值自动增加

字段名 数据类型 AUTO_INCREMENT;

练习:将表中的id字段设置为自动增加

drop table employee;

create table employee(

id int primary key auto_increment,

name varchar(20) unique,

gender char(1) not null,

birthday date,

entry_date date,

job varchar(50) default 'sxs',

salay double,

resume text

);

show tables;

desc employee;

(6)索引的概念

在数据库中查找特定的数据,例如:当执行“select*from student where id=10000”语句时,mysql数据库必须从第一条记录开始遍历,直到找到id为10000的数据。显然,这样的效率极低。为此,mysql允许建立索引来加快表的查询和排序。索引可以提高数据的查询速度。数据库的索引好比新华字典的音序表,它是对数据库中一列或多列的值进行排序后的一种结构,其作用就是提高表中数据的查询速度,mysql中的索引分为很多种,如下所示:

  • 普通索引:是由KEY或INDEX定义的索引,可以创建在任何数据中,其值是否唯一和非空没有固定的要求,由字段本身的约束条件所决定;
  • 唯一性索引:唯一索引是由UNIQUE定义的索引,该索引所在字段的值必须是唯一的;
  • 全文索引:是由FULLTEXT定义的索引,它只能创建在CHAR、VARCHAR 或TEXT类型的字段上,而且,现在只有MyISAM存储引擎支持全文索引;
  • 单列索引:单列索引指的是在表中单个字段上创建索引,可以是普通索引,唯一索引或全文索引,只要保证索引只对应表中的一个字段即可;
  • 多列索引:多列索引指的是在表中多个字段上创建索引,只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用;
  • 空间索引:由SPATIAL定义的索引,只能创建在空间数据类型的字段上(GEOMETRY\POINT\LINESTRING\POLYGON)现在只有MyISAM存储引擎支持空间索引。

注意:虽然索引可以跳高数据的查询速度,但索引会占用一定的磁盘空间,并且在创建和维护索引时,其消耗的时间是随着数据量的增加而增加的,因此,使用索引是,应该综合考虑索引的优点和缺点。

(7)创建索引

  • 创建表的时候创建索引
CREATE TABLE 表名(字段名 数据类型[完整性约束条件],
                   字段名 数据类型[完整性约束条件],
                   ......
                   字段名 数据类型
                   [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [别名](字段名1 [(长度)]) [ASC升序|DESC降序])
);

练习:创建普通索引

create table ti(

id int,

name varchar(20),

score float,

index (id)

);

desc ti;

select * from ti where id = 1 \G

为了查看索引是否被使用,可以使用explain语句进行查看

explain select * from ti where id = 1 \G

mysql> explain select * from ti where id = 1 \G

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: ti

type: ref

possible_keys: id

key: id

key_len: 5

ref: const

rows: 1

Extra: NULL

1 row in set (0.23 sec)

练习:创建唯一索引

create table t2(

id int not null,

name varchar(20) not null,

score float,

unique index unique_id(id ASC)

);

mysql> show create table t2 \G

*************************** 1. row ***************************

Table: t2

Create Table: CREATE TABLE `t2` (

`id` int(11) NOT NULL,

`name` varchar(20) NOT NULL,

`score` float DEFAULT NULL,

UNIQUE KEY `unique_id` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.08 sec)

练习:创建全文索引

create table t3(

id int not null,

name varchar(20) not null,

score float,

fulltext index fulltext_name(name)

)ENGINE=MyISAM;

练习:创建单列索引

create table t4(

id int not null,

name varchar(20) not null,

score float,

index single_name(name(20))

);

练习:创建多列索引

create table t5(

id int not null,

name varchar(20) not null,

score float,

index multi(id name(20))

);

explain select * from t5 where id = 1;

练习:创建空间索引

create table t6(

id int,

space GEOMETRY NOT NULL,

SPATIAL INDEX sp(space)

)engine=MyISAM;

  • 使用CREATE INDEX 语句在已经存在的表上创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名 (字段名 [(长度)] [ASC|DESC]);
create table book(
              bookid int not null,
              bookname ) not null,
              authors ) not null,
              info ) null,
              comment ) null,
              publicyear YEAR NOT NULL
);

练习:创建普通索引在bookid这一列上

create index index_id on book(bookid);

练习:创建唯一索引在bookid这一列上

create unique index unqidx on book(bookid);

练习:创建单列索引

练习:创建多列索引

create index mulitidx on book(authors(20),info(20));

练习:创建全文索引,注意只能加在引擎MyISAM的表上

drop table book;

create table book(

bookid int not null,

bookname varchar(255) not null,

authors varchar(255) not null,

info varchar(255) null,

comment varchar(255) null,

publicyear YEAR NOT NULL

)engine=MyISAM;

create FULLTEXT index ftindex on book (bookname);

练习:创建空间索引

create table t7(

g geometry not null

)engine=MyISAM;

create spatial index spatidx on t7(g);

  • 使用ALTER TABLE 语句在已经存在表上创建索引
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名 (字段名 [(长度)] [ASC|DESC]);

练习:创建普通索引

drop table book;

create table book(

bookid int not null,

bookname varchar(255) not null,

authors varchar(255) not null,

info varchar(255) null,

comment varchar(255) null,

publicyear YEAR NOT NULL

);

alter table book add index indexone (bookid);

(8)删除索引

方式1:ALTER TABLE 表名 DROP INDEX 索引名

alter table book drop index indexone;

方式2:DROP INDEX 索引名 ON 表名;

drop index indexone on book;

本文链接:http://www.cnblogs.com/homewch/p/6018642.html

MySQL学习笔记02_数据库和表的基本操作的更多相关文章

  1. MySQL学习笔记_4_MySQL创建数据表(下)

    MySQL创建数据表(下) 五.数据表类型及存储位置 1.MySQL与大多数数据库不同,MySQL有一个存储引擎概念.MySQL可以针对不同的存储需求选择不同的存储引擎. 2. showengines ...

  2. MySQL学习笔记01_数据库基础知识

    01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...

  3. 【转】MYSQL入门学习之八:数据库及表的基本操作

    转载地址:http://www.2cto.com/database/201212/175867.html 一.操作数据库  www.2cto.com    1.查看数据库          show ...

  4. MySQL学习笔记_2_MySQL创建数据表(上)

    MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][ ...

  5. MySQL学习笔记_3_MySQL创建数据表(中)

    MySQL创建数据表(中) 三.数据字段属性 1.unsigned[无符号] 可以让空间增加一倍 比如可以让-128-127增加到0-255 注意:只能用在数值型字段 2.zerofill[前导零] ...

  6. MySQL学习笔记(一)—数据库基础

    一.数据库概述 1.数据库的组织结构      (1)数据库就是用来存放信息的仓库.      (2)数据库里的数据集合都存放在数据表(table)里.      (3)数据表由数据行(row)和数据 ...

  7. Hibernate学习笔记(一)-->数据库单表操作

    Hibernate框架是一个全ORM映射框架,是一个非常流行的数据库操作框架之一,现在比较流行的还有MyBatis半ORM映射框架 在MyEclipse IDE开发工具中,可以很轻松的搭建Hibern ...

  8. MySQL学习笔记2(多表操作)

    外键:使两张表之间存在关联 特点: 1.从表外键的值是对主表主键的引用 2.从表外键类型,必须与主表主键类型一致 示例: 创建两个表并准备数据: USE mybase; CREATE TABLE ca ...

  9. MySQL学习笔记:从一个表update到另外一个表

    # ---- 测试数据 ---- # 表1 CREATE TABLE temp_x AS AS c_id, 1.11 AS c_amount FROM DUAL UNION ALL AS c_id, ...

随机推荐

  1. 软工实践——github文件整理

    软工实践中,整理github上文件遇到的一些问题 先扔github链接Transcend/ActivityHelper 1.原来呢我们团队的github上的文件的安排十分凌乱,没有归档.把说明文档.源 ...

  2. Yii2 高级模板添加更多Application

    单独的前端和后端有时是不够的. 如果需要额外的应用程序,例如博客blog: 1.将frontend复制到blog,环境/ dev / frontend到environments / dev / blo ...

  3. java实现快速排序

    package com.wangjj.quicksort; import java.util.Arrays; /** * 快速排序 * @author Administrator * */ publi ...

  4. css3动画第一式--简单翻滚

    在w3cschool上面查阅css3的动画语法手册时,发现“css3 动画”栏目首页放了一个翻滚的div动画案例,觉得挺好看的,于是就自己模仿着写了一下,感觉还行O(∩_∩)O哈哈~ 查看原地址 下面 ...

  5. 百度地图API 批量添加 带检索功能的信息窗口

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. MySQL主从复制

    Mysql主从复制介绍 MySQL支持单向.双向.链式级联.实时.异步复制.在复制过程中,一台服务器充当服务器(Master),而一个或多个其它的服务器充当从服务器(Slave). 复制可以是单向:M ...

  7. 学习 opencv---(8)非线性滤波:中值滤波,双边滤波

    正如我们上一篇文章中讲到的,线性滤波可以实现很多种不同的图像变换.然而非线性滤波,如中值滤波器和双边滤波器,有时可以达到更好的实现效果. 邻域算子的其他一些例子还有对 二值图像进行操作的形态学算子,用 ...

  8. matlab更改打开时候默认路径

    每次打开matlab都会的修改默认路径,是一件有些烦恼的事情.所以,就想尝试更改默认路径 方法如下: 1.在matlab安装目录,找到toolbox文件夹,打开local文件件,打开matlabrc. ...

  9. sz rz SecureCRT

    yum install lszrz apt-get install lszrz wget http://down1.chinaunix.net/distfiles/lrzsz-0.12.20.tar. ...

  10. cmd连接mysql的方法详解(转载)

    连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车) 创建授权:grant select on 数据库.* to 用户名@登 ...