目录
零、MySQL安装与配置
一、基本概念
二、基本语法
三、常用指令
四、四种SQL语句
零、MySQL安装与配置
http://www.cnblogs.com/hikarusun/archive/2012/04/26/2471039.html
http://jingyan.baidu.com/article/597035521d5de28fc00740e6.html
http://database.51cto.com/art/201304/387439.htm
http://yanln.iteye.com/blog/2193842
端口:3306
账户:root
WindowsServiceName:MySQL56
可视化工具:Navicat for MySQL【功能非常强大】
启动MySQL服务:右击我的电脑-管理-服务和应用程序-服务-MySQL57,启动即可;如果没有启动,可能出现错误:cann't connect to MySQL Server on localhost
官方文档:一般安装MySQL时会有官方文档【http://dev.mysql.com/doc/有下载】
一、基本概念
1、MySQL是关系型数据库,由一个或多个表格组成。表格:表头、行、列、键(具有唯一性)、值
2、MySQL语句执行有两种方法:
(1)控制台下执行单条语句。
(2)通过SQL脚本完成对数据库的操作,该脚本由一条或多条MySQL语句(SQL语句+扩展语句)组成,保存时脚本后缀名为.sql。
3、MySQL是基于客户端-服务器的数据库。服务端存放管理数据,直接与数据文件打交道;客户端与用户打交道,获取、操作数据都是通过连接服务端完成的。服务器软件为MySQL DBMS;客户端可以是MySQL提供的工具,脚本语言、web应用开发语言、程序设计语言等。
二、基本语法
1、标识符:命名一些对象,如数据库、表、列、变量等。Windows下标识符大小写不敏感,Linux下敏感。
2、关键字:如create、drop、select等。标识符不能与关键字重名。
3、函数:如字符串函数、数学函数、日期时间函数、搜索函数、加密函数、信息函数等。
4、数据类型【以下类型并不全面,随着版本更新也不能保证完全准确】
1)数字类型
A、整数:tinyint、smallint、mediumint、int、bigint,分别有1、2、3、4、8字节。可以指定位数,如int(4),注意,4指位数,不是字节数。
B、浮点数:float、double、real、decimal。如double(20,4),20指定最大位数,4指定小数点后精度。
2)日期和时间:date、time、datetime、timestamp、year【关于日期和时间,更多见日期时间类型详解】
3)字符串类型(文本和字符串后面的修饰表示的都是字符数,不是字节数)
A、字符串:char、varchar。注意char和varchar后面都可以跟0-255的修饰。对于char,这个值是实际大小,比这个长要截短,比这个短要用空格补足。对于varchar,这个值是大小的最大值,比这个值大要截短,比这个值小不会填充。varchar的好处:不知道字段确定长度时,可以节省空间;便于搜索比较。一个汉字占的字节数与编码有关:GBK占2字节,UTF-8占3字节。定长字符串的好处:MySQL处理定长字符串的快很多;不允许对变长列进行索引(存疑)。
B、文本:tinytext、text、mediumtext、longtext。字符范围:255、65535、2^24-1、2^32-1。
C、二进制(可存储图片等):tinyblob、blob、mediumblob、longblob。字节范围:255、65535、2^24-1、2^32-1。
5、MySQL语句中,所有空格被忽略,因此跨行无所谓。
三、常用指令
1、登陆与退出(登陆指令的前提是已将mysql所在的目录加入PATH或bin,或在mysql所在的目录中)
mysql -u kismet -p=》会提示输入密码
mysql -u kismet -password *****
mysql -u kismet -h hostname -p/password
mysql -u ... -h ... -p/password ... -D databasename
mysql -D …… -u kismet -p < test.sql(登录时执行脚本)
quit
http服务器:/../../httpd -k start/stop/restart
2、创建、查看与删除一个数据库
create database 数据库名 [其他选项];
show databases;【其中的informa_schema和mysql是自带的数据库】
drop database 数据库名;
3、选择所要操作的数据库
登录时-D;
use 数据库名;(可以不加分号)
4、创建、查看与删除表
(1)create table 表名称(列声明);如:
create table students ( id int unsigned not null auto_increment primary key,
.........,
tel char(11) null default "-");
(2)列声明:名称+类型(可能有unsigned)+(null/not null)+(auto_increment)+(primary key)+(default+……)
null/not null:是否可以为空(默认可以为空)
auto_increment:适用于整数列(插入为NULL,值为最大+1);只能有一个,而且必须被索引;使用auto_increment列,可以指定插入值,只要它尚未被使用过,后面的插入增量基于该指定的值;last_insert_id()函数可以获得最近插入的auto_increment值(个人猜测在触发器中很有用武之地)
primary key:该列为主键,索引列,值唯一,列唯一
default:指定默认值;只支持常量,不支持函数;对于null列,如果不指定则默认为null
(3)其他部分
if not exists:如果该表存在,则会报错;为避免报错,可以改为:create if not exists table students ……
engine:可以在最后(括号之后)加上engine=innodb/myisam……指定存储引擎
(4)show tables;describe 表名【等价于:show columns from 表名】
(5)drop table 表名;
5、向表中插入数据【血泪教训:insert语句一定要指定插入值与列的对应关系;否则数据库一旦扩展或调整顺序,程序就崩溃了!】
插入完整的行:如果某些列可以由MySQL自动生成而不需要手动添加,可以将它们置为null,MySQL会自己处理,这样的例子包括 自增的主键、timestamp类型等;这种方式最好不要使用,因为一旦表结构发生变化(如顺序变化、添加列),插入语句将失败。
插入行的一部分:指定列名,可以只插入部分数据(其他条件是该列允许null或提供了默认值,否则会报错),或者不按顺序插入
插入多行:单条insert插入多条数据比多个insert效率要高
插入检索出的数据:不要求列名匹配;按照顺序匹配
插入不重复的数据:测试发现,重复与否的判断标准是primary key、unique index,普通的key可以重复
补充:插入操作相对查询来说可能比较耗时(尤其是有很多索引需要更新时)(update和delete同理),有时为了保证检索的效率,可以降低插入的优先级。
insert [into] `user` VALUES(null,'asdfadsf',null,30)#插入完整的行
insert [into] `user`(name,age) values('hello',45)#插入行的一部分
insert `user`(name,age) values('hello',45),('world',400)#插入多行
insert `user`(name,age) select name,age from tmp#插入检索出的数据
insert ignore into ……
insert low_priority into#低优先级插入
6、查询表中数据:见四
7、更新表中数据
可以更新多列,用逗号隔开;可以根据表中旧值更新新值(旧值和新值不一定是同一列);新值可以使用子查询获得;使用ingore关键字,当更新出现错误时可以继续更新;新值可以为NULL
update user set name='zhou',age=11 where id=10;#可以有多列,用逗号隔开
update user set age=age+1 where id=1;#根据表中旧值更新新值
update user set age=id+1 where id=10;#旧值与新值不一定是同一列
update user set name=(select name from teacher where id=10) where id=10#新值可以使用子查询获得
update ignore user ……#使用ignore,当更新出现错误时可以继续更新
update user set name=null where ……#新值可以为null
8、删除表中的数据
delete from 表名称 where 删除条件;
delete from 表名称;//清空表数据,不能使用delete * fromo 表名称;
如果要删除整个表,尽量不要使用delete,速度较慢,因为它会逐行删除数据;使用truncate table完成相同工作,但速度更快(实际上删除整个表并重新创建一个表),如truncate table 'user'
【对于update和delete,没有办法撤销;因此在执行之前,一定使用select验证下where子句的条件是否争取,否则后果不堪设想】
9、修改表本身:创建表时应该足够谨慎,修改表尽量避免
(1)添加列
alter table 表名 add 列名 列数据类型(可以加其他属性) [after 插入位置];
(2)修改列
alter table 表名 change 列名 列新名称 列数据类型(可以加其他属性);
(3)删除列
alter table 表名 drop 列名称;
(4)重命名表
alter table 表名 rename 新表名;或
rename table 表名 to 新表名;
(5)其他:增加外键等
四、四种SQL语句
1、DDL:Data Definition Language
(1)包括:CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME
(2)不需要commit,因此也无法回滚。
2、DML:Data Manipulation Language
包括:SELECT、INSERT、UPDATE、DELETE、MERGE、CALL、EXPLAIN PLAN、LOCK TABLE
3、DCL:Data Control Language
包括:GRANT、REVOKE
4、TCL:Transaction Control Language
包括:SAVEPOINT、ROLLBACK、SET TRANSACTION
- fastclick 源码注解及一些基础知识点
在移动端,网页上的点击穿透问题导致了非常糟糕的用户体验.那么该如何解决这个问题呢? 问题产生的原因 移动端浏览器的点击事件存在300ms的延迟执行,这个延迟是由于移动端需要通过在这个时间段用户是否两次 ...
- .NET基础知识点
.NET基础知识点 l .Net平台 .Net FrameWork框架 l .Net FrameWork框架提供了一个稳定的运行环境,:来保障我们.Net平台正常的运转 l 两种交 ...
- JavaScript 开发者经常忽略或误用的七个基础知识点(转)
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- JavaScript 开发者经常忽略或误用的七个基础知识点
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- JavaScript开发者常忽略或误用的七个基础知识点
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- JavaScript语言基础知识点图示(转)
一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运算符 4.JavaScript 数组 5.Ja ...
- JavaScript 语言基础知识点总结
网上找到的一份JavaScript 语言基础知识点总结,还不错,挺全面的. (来自:http://t.cn/zjbXMmi @刘巍峰 分享 )
- c语言学习之基础知识点介绍(三):scanf函数
本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...
- c语言学习之基础知识点介绍(二):格式化控制符和变量的补充
上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...
- (转)JavaScript 开发者经常忽略或误用的七个基础知识点
英文原文:7 JavaScript Basics Many Developers Aren't Using (Properly) JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和 ...
随机推荐
- ENetwork Basic Configuration PT Practice SBA
CCNA Exploration: 网络基础知识 (版本 4.0) A few things to keep in mind while completing this activity: 1 Do ...
- 51单片机I/O口直接输入输出实例(附调试及分析过程)
51单片机P0/P1/P2/P3口的区别: P0口要作为低8位地址总线和8位数据总线用,这种情况下P0口不能用作I/O,要先作为地址总线对外传送低8位的地址,然后作为数据总线对外交换数据: P1口只能 ...
- 利用WebLog Experet分析日志获取性能需求
一.下载WebLog Expert日志分析工具 官网下载地址:http://www.weblogexpert.com/download.htm 二.安装 安装很简单,点击“下一步”默认安装即可 三.配 ...
- 树莓派的GPIO编程
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 树莓派除了提供常见的网口和USB接口 ,还提供了一组GPIO(General Purpose Input/ ...
- 创建,删除DOM
需求说明: 1.上传图片,有删除功能,可上传5张,至少上传一张 html代码如下 <div class="imgUpBox"> <div class=" ...
- linux基础 作业篇
1.自动部署反向代理 web nfs #!/usr/bin/python #-*- coding:utf-8 -*- #开发脚本自动部署及监控 #1.编写脚本自动部署反向代理.web.nfs: #!/ ...
- [codevs]1060搞笑世界杯
CODEVS上一道钻石题,还是DP的思想,先来题目 1060 搞笑世界杯 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description ...
- hdu4417 Super Mario
Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability re ...
- js鼠标移入移出事件会被子元素触发解决方法
问题:js写了一个鼠标移入移出事件,但是发现会被内部子元素不断的触发 解决方法:建立一个空的div定位到需要触发的位置,然后设置大小和触发范围一样,最后将事件写在空的div上.
- Yeelink初步体验
环境 Qemu: 2.8.0 开发板:vexpress-ca9 概述 前面的博文已经使我们的虚拟开发板具备了访问外网的目的,离物联网越来越近了.要玩物联网,Yeelink不得不说,它提供了 ...